[解決済み] reactのuseStateフックでコールバックを使う方法 [重複]。
2022-03-05 09:52:21
質問
私はフックを持つ機能的なコンポーネントを使用しています。私は子から親の状態を更新する必要があります。私は親でprop関数を使用しています。 私のプロップ関数が現在の状態ではなく、前の状態を取得していることを除いて、すべてがうまく動作します。私のプロップ関数は、以下の前に実行されます。 使用状態 フックが現在の状態を設定する。 useState呼び出しの後、コールバック関数が実行されるのを待つにはどうすればよいのでしょうか。私は次のようなものを探している。 setState(state,callback) クラスベースのコンポーネントから。
以下は、そのコード・スニペットです。
function Parent() {
const [Name, setName] = useState("");
getChildChange = getChildChange.bind(this);
function getChildChange(value) {
setName(value);
}
return <div> {Name} :
<Child getChildChange={getChildChange} ></Child>
</div>
}
function Child(props) {
const [Name, setName] = useState("");
handleChange = handleChange.bind(this);
function handleChange(ele) {
setName(ele.target.value);
props.getChildChange(collectState());
}
function collectState() {
return Name;
}
return (<div>
<input onChange={handleChange} value={Name}></input>
</div>);
}
解決方法は?
useEffect/useLayoutEffectを使用すると実現できます。
const SomeComponent = () => {
const [count, setCount] = React.useState(0)
React.useEffect(() => {
if (count > 1) {
document.title = 'Threshold of over 1 reached.';
} else {
document.title = 'No threshold reached.';
}
}, [count]);
return (
<div>
<p>{count}</p>
<button type="button" onClick={() => setCount(count + 1)}>
Increase
</button>
</div>
);
};
詳しくはこちら こちら .
もし、すぐに使えるソリューションをお探しなら、以下をご覧ください。 このカスタムフック は、useStateと同様に動作しますが、2番目のパラメータとしてコールバック関数を受け取ります。
// npm install use-state-with-callback
import useStateWithCallback from 'use-state-with-callback';
const SomeOtherComponent = () => {
const [count, setCount] = useStateWithCallback(0, count => {
if (count > 1) {
document.title = 'Threshold of over 1 reached.';
} else {
document.title = 'No threshold reached.';
}
});
return (
<div>
<p>{count}</p>
<button type="button" onClick={() => setCount(count + 1)}>
Increase
</button>
</div>
);
};
関連
-
[解決済み】React - 式は1つの親要素を持つ必要がありますか?
-
[解決済み] Apolloクライアントでログアウトした後、ストアをリセットする
-
[解決済み] ReactJS giving error Uncaught TypeError: Super expression は null か関数でなければならず、undefined ではありません。
-
[解決済み] SVGサークル内の画像にボーダーを追加する方法
-
[解決済み] React + TypeScript のエラーです。この呼び出しにマッチするオーバーロードがありません
-
[解決済み] formcontrollabel - material-ui | Reactのデフォルトのtypography classを変更するには?
-
[解決済み] React Hooksの「exhaustive-deps」lintルールを理解する
-
[解決済み] reactのuseStateフックでコールバックを使う方法 [重複]。
-
[解決済み] useEffect React Hook使用時の依存性欠如の警告を修正する方法
-
[解決済み] Reactフック:コールバック内から最新の状態にアクセスする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Typescript react - モジュール ''react-materialize'' の宣言ファイルが見つかりませんでした。'path/to/module-name.js' は暗黙のうちに any 型を持ちます。
-
[解決済み】Reactを使用したMapBoxのCSSが欠落している件
-
[解決済み] バベルエラーです。JSX値は、式または引用されたJSXテキストのいずれかである必要があります。
-
[解決済み] configuration.module に未知のプロパティ 'loaders' があります。
-
[解決済み] validateDOMNesting警告React
-
[解決済み] プロップ `history` は `Router` で必須とマークされているが、その値は `undefined` である。
-
[解決済み] AxiosにCORSの問題が発生
-
[解決済み] componentDidUpdate'メソッドはいつ使用するのですか?
-
[解決済み】useState setメソッドが変更を即座に反映しない。
-
[解決済み】react hooksで`setState`コールバックを使用する方法