React Hooks (useState) のプッシュメソッド? 質問する

React Hooks (useState) のプッシュメソッド? 質問する

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>

おすすめ記事