検索

ホームページ  >  に質問  >  本文

array.length メソッドが、handleChange イベント ハンドラーの入力ステップよりも常に 1 ステップ遅いのはなぜですか?

<p>入力に基づいてフィルタリングし、オブジェクトが 10 個以下の場合にのみ結果を表示するリストを作成しようとしていますが、array.length は常に入力より遅れます。 </p> <pre class="brush:php;toolbar:false;">const [countriesToShow, setCountriesToShow] = useState([]) const [newSearch, setSearch] = useState('') const [showSearched, setShowShearched] = useState(true) const [notificationMessage, setNotificationMessage] = useState(null) useEffect(() => { console.log(countriesToShow.length) },[表示する国]) const handleSearchChange = (イベント) => { setCountriesToShow(countries.filter(country => 国名.common.toLowerCase().includes(event.target.value.toLowerCase()))) setSearch(event.target.value) if (event.target.value.trim().length === 0) { setNotificationMessage(null) setShowShearched(false) } else if (countriesToShow.length <= 10) { setNotificationMessage(null) setShowShearched(true) console.log(countriesToShow.length) } それ以外 { setNotificationMessage('リストが長すぎます') setShowShearched(false) console.log(countriesToShow.length) } }</pre> <p> エフェクトフックを使用して長さを正しく出力することができましたが、入力よりも遅れているため、これを「else if (countriesToShow.length <= 10)」に実装する方法に混乱しています。 。 </p>
P粉596161915P粉596161915471日前390

全員に返信(1)返信します

  • P粉765684602

    P粉7656846022023-08-16 09:53:17

    handleSearchChange を呼び出してから setCountriesToShow を呼び出して状態を更新する場合:

    リーリー

    再レンダリングをトリガーしました。新しく更新された状態値は、次回の再レンダリングでのみ使用可能になるため、遅れが生じます。

    以下の値を使用したい場合は、最初にそれを変数に保存する必要があります:

    リーリー

    返事
    0
  • キャンセル返事