useState 配列 React フック内で要素をプッシュする方法は? これは React State の古いメソッドですか? それとも新しいものですか?
例えばsetState プッシュの例?
ベストアンサー1
使用する場合はuseState
、状態項目の更新メソッドを取得できます。
const [theArray, setTheArray] = useState(initialArray);
その後、新しい要素を追加するときは、その関数を使用して、新しい配列または新しい配列を作成する関数を渡します。状態の更新は非同期で、場合によってはバッチ処理されるため、通常は後者を使用します。
setTheArray(oldArray => [...oldArray, newElement]);
次のような特定のユーザー イベントのハンドラーでのみ配列を更新する場合は、コールバック フォームを使用せずに済む場合もありますclick
(ただし、 は除きますmousemove
)。
setTheArray([...theArray, newElement]);
Reactがレンダリングのフラッシュを保証するイベントは、リストされている「個別のイベント」です。ここ。
ライブ例 (コールバックを に渡すsetTheArray
):
const {useState, useCallback} = React;
function Example() {
const [theArray, setTheArray] = useState([]);
const addEntryClick = () => {
setTheArray(oldArray => [...oldArray, `Entry ${oldArray.length}`]);
};
return [
<input type="button" onClick={addEntryClick} value="Add" />,
<div>{theArray.map(entry =>
<div>{entry}</div>
)}
</div>
];
}
ReactDOM.render(
<Example />,
document.getElementById("root")
);
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.1/umd/react-dom.production.min.js"></script>
theArray
における への唯一の更新はclick
イベント (「個別の」イベントの 1 つ) における更新であるため、 での直接更新で済みますaddEntry
。
const {useState, useCallback} = React;
function Example() {
const [theArray, setTheArray] = useState([]);
const addEntryClick = () => {
setTheArray([...theArray, `Entry ${theArray.length}`]);
};
return [
<input type="button" onClick={addEntryClick} value="Add" />,
<div>{theArray.map(entry =>
<div>{entry}</div>
)}
</div>
];
}
ReactDOM.render(
<Example />,
document.getElementById("root")
);
<div id="root"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.1/umd/react-dom.production.min.js"></script>