ここでReactフックを間違って使用しているのはどうしてですか?

マイク・ウォルドラップ

ヘルシンキ大学のFullstackOpenコースに合わせて簡単な電話帳を作成しています。以下のコードのログは、「filterBy」状態が常にレンダリングビハインドであり、contacts.filterから「contact.name.toUpperCase」が関数ではないというエラーが発生していることを示しています。だから私は2つの質問があると思います。

  1. クラスコンポーネントを使用せずに、彼らが私にやらせようとしていることを実行することもできますか?彼らはまだコースでそれらを紹介していないので、私はそうだと思います。しかし、状態を同期させる必要がある場合(たとえば、入力を使用して画面に表示されるオブジェクトの配列をフィルタリングする場合)にクラスコンポーネントを使用する必要があることをチュートリアルで聞いたことがあります。しかし、filterBy状態を実際にフィルター入力の内容と同期させることはできません。

  2. 「constcontactsToShow ...」で始まる行を知っています。機能しているとしても、おそらくそれを行うには最適な方法ではありません。これをどのように行うのが最善ですか?

コード:

import React, { useState } from 'react'
import Contact from './components/Contact'

const App = () => {
  const [contacts, setContacts] = useState([
    { name:'Guy Fieri', number: '020-4837473'},
    { name:'Gordon Ramsay', number: '75749483832'},
    { name:'Mr. Tasty', number: '43-4982839'},
    { name:'Dude man', number: '11-33-448382'},
  ]) 
  const [newName, setNewName] = useState('')
  const [newNumber, setNewNumber] = useState('')
  const [showAll, setShowAll] = useState(true)
  const [filterBy, setFilterBy] = useState('');

  const contactsToShow = showAll ? contacts : contacts.filter(contact => contact.name.toUpperCase().search(filterBy) !== -1)


  const rows = () => contactsToShow.map(contact =>
    <Contact
      key={contact.name}
      name={contact.name}
      number={contact.number}
    />
  )
  
  const handleContactNameChange = (event) => {
    console.log(event.target.value)
    setNewName(event.target.value)
  }

  const handleContactNumberChange = (event) => {
    console.log(event.target.value)
    setNewNumber(event.target.value)
    console.log(newNumber);
  }

  const handleFiltering = (event) => {
    console.log(event.target.value)
    setFilterBy(event.target.value)
    setShowAll(false)
    console.log(filterBy);
  }

  const addContact = (event) => {
    event.preventDefault()
    // 
    if(newName === '') return true
    if(newNumber === '') return true

    let dup = false
    contacts.forEach(contact => {
      if (contact.name === newName) dup = true
    })

    if (!dup) {
      const contactObject = {
        name: newName,
        number: newNumber
      }
  
      setContacts(contacts.concat(contactObject))
      setNewName('')
      setNewNumber('')
    }
  }

  return (
    <div>
      <h1>Phonebook</h1>
      <form onSubmit={addContact}>
      <div>
        Filter:<input value={filterBy} onChange={handleFiltering}/>
      </div>
        Name: <input
          value={newName} 
          onChange={handleContactNameChange}
        /><br/>
        Number: <input
          value={newNumber} 
          onChange={handleContactNumberChange}
        /><br/>
        <button type="submit">save</button>
      </form>
      <ul>
        {rows()}
      </ul>
    </div>
  )
}

export default App 

何を試すことができますか?私はこのように反応するのはとても初めてです。

Praneeth Paruchuri

コードに必要な変更がいくつかあります。contact.name.toUpperCase何も問題がないので、なぜこのエラーが発生するのかわかりません

contactをupperCaseに変換していますが、変換していませんfilterBy

ここで、2つの質問に答えます。

  1. あなたはreact16で導入されたフックを使用しています。これにより、機能コンポーネントに状態がもたらされました。コードはフックまたはクラスコンポーネントで正常に機能します。

  2. 状態変数(contact, newName, newNumber, showAll, filterBy)を変更すると、コンポーネントが再レンダリングされます。これrows()により関数が呼び出され、必要な結果が表示されます。したがってcontactsToShow、関数内にプッシュするだけです

コードを壊すことはありません。Contactコンポーネントが何であるかわからないので、コンポーネントをに変更してdivconsole.logを追加し、何が起こっているかを確認しました。正常に動作します。それをチェックしてくださいhttps//codesandbox.io/embed/vibrant-dawn-o1r1y

さらに疑問がある場合はお知らせください。サポートさせていただきます。:)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

間違った型を使用していると言うこの型クラスのエラーを理解するにはどうすればよいですか?

分類Dev

JavaScript関数を「クラス」として使用する:ここで何が間違っているのですか?

分類Dev

なぜこのPythonスクリプトは、ifブロックでawkとcomapring値を使用して、間違った出力を提供しているのですか?

分類Dev

Solr検索インデックスをデータベースとして使用する-これは「間違っている」のですか?

分類Dev

私はこれをforループで間違って書いていることを知っていますが、複数の文字を受け入れることができるように正しく書くにはどうすればよいですか?

分類Dev

.txtファイルを単語の辞書に変換しようとしています。どこが間違っているのですか?(C#)

分類Dev

私はこのjsonを解析しようとしていますが、ここで何が間違っているのかわかりません

分類Dev

Ajaxを使用しているときに、コールバックを機能させることができません。コールバックを待っていないようですが、何が間違っているのですか?

分類Dev

NetworkCapabilitiesとConnectivityManagerCompatを使用してネットワークが計測されているかどうかを判断することの違いは何ですか?

分類Dev

パンダのpyplotにおける間違ったx値は整数にインデックスを変換してデータフレーム。どのように私は、正しい値を得ることができますか?

分類Dev

これにダイクストラのアルゴリズムを適用する際にどこが間違っているのでしょうか?

分類Dev

*と&を使用して値が等しいかどうかを比較することの違いは何ですか?

分類Dev

これらの画像を整列させようとしているflexboxで何が間違っていますか?

分類Dev

外側をクリックして要素を閉じる-ここで何が間違っているのですか?

分類Dev

「各フックの前のモカ」メッセージは赤で表示されます。具体的に何が間違っているのかをどうやって知ることができますか?

分類Dev

このスニペットでmallocを間違って使用していますか

分類Dev

このマップの破壊は、私が期待するようには機能していません。私は何が間違っているのですか?

分類Dev

このメソッドをモックすることで何が間違っているのですか?

分類Dev

Cでは、関数への文字ポインターを渡して、どこかを指すようにします。間違っていますか?

分類Dev

LockObjectの同期とこれをロックとして使用することの違いは何ですか?

分類Dev

JPAリポジトリを使用して保存できません。私はここで何が間違っているのですか?

分類Dev

どこが間違っているのですか?1桁を返す前に、数値が追加された回数を印刷しようとしています

分類Dev

locを使用することと、角かっこだけを使用してPandas / Pythonの列をフィルターすることの違いは何ですか?

分類Dev

Pandas DataFrameの場合、角かっこまたはドットを使用して列にアクセスすることの違いは何ですか?

分類Dev

whileループを使用して、文字列がなくなるまで文字列から文字を削除しようとしています。私はここで何が間違っているのですか?

分類Dev

pandas groupby .sumはどのようにして間違った値を返すことができますか?

分類Dev

\ P {Cn}のどこが間違っているのですか?

分類Dev

ボックスシャドウアニメーションを作成して側面で跳ね返らせるにはどうすればよいですか?私はどこが間違っていますか?

分類Dev

PythonのForループを間違って使用していますか?どうすればこれを解決できますか?

Related 関連記事

  1. 1

    間違った型を使用していると言うこの型クラスのエラーを理解するにはどうすればよいですか?

  2. 2

    JavaScript関数を「クラス」として使用する:ここで何が間違っているのですか?

  3. 3

    なぜこのPythonスクリプトは、ifブロックでawkとcomapring値を使用して、間違った出力を提供しているのですか?

  4. 4

    Solr検索インデックスをデータベースとして使用する-これは「間違っている」のですか?

  5. 5

    私はこれをforループで間違って書いていることを知っていますが、複数の文字を受け入れることができるように正しく書くにはどうすればよいですか?

  6. 6

    .txtファイルを単語の辞書に変換しようとしています。どこが間違っているのですか?(C#)

  7. 7

    私はこのjsonを解析しようとしていますが、ここで何が間違っているのかわかりません

  8. 8

    Ajaxを使用しているときに、コールバックを機能させることができません。コールバックを待っていないようですが、何が間違っているのですか?

  9. 9

    NetworkCapabilitiesとConnectivityManagerCompatを使用してネットワークが計測されているかどうかを判断することの違いは何ですか?

  10. 10

    パンダのpyplotにおける間違ったx値は整数にインデックスを変換してデータフレーム。どのように私は、正しい値を得ることができますか?

  11. 11

    これにダイクストラのアルゴリズムを適用する際にどこが間違っているのでしょうか?

  12. 12

    *と&を使用して値が等しいかどうかを比較することの違いは何ですか?

  13. 13

    これらの画像を整列させようとしているflexboxで何が間違っていますか?

  14. 14

    外側をクリックして要素を閉じる-ここで何が間違っているのですか?

  15. 15

    「各フックの前のモカ」メッセージは赤で表示されます。具体的に何が間違っているのかをどうやって知ることができますか?

  16. 16

    このスニペットでmallocを間違って使用していますか

  17. 17

    このマップの破壊は、私が期待するようには機能していません。私は何が間違っているのですか?

  18. 18

    このメソッドをモックすることで何が間違っているのですか?

  19. 19

    Cでは、関数への文字ポインターを渡して、どこかを指すようにします。間違っていますか?

  20. 20

    LockObjectの同期とこれをロックとして使用することの違いは何ですか?

  21. 21

    JPAリポジトリを使用して保存できません。私はここで何が間違っているのですか?

  22. 22

    どこが間違っているのですか?1桁を返す前に、数値が追加された回数を印刷しようとしています

  23. 23

    locを使用することと、角かっこだけを使用してPandas / Pythonの列をフィルターすることの違いは何ですか?

  24. 24

    Pandas DataFrameの場合、角かっこまたはドットを使用して列にアクセスすることの違いは何ですか?

  25. 25

    whileループを使用して、文字列がなくなるまで文字列から文字を削除しようとしています。私はここで何が間違っているのですか?

  26. 26

    pandas groupby .sumはどのようにして間違った値を返すことができますか?

  27. 27

    \ P {Cn}のどこが間違っているのですか?

  28. 28

    ボックスシャドウアニメーションを作成して側面で跳ね返らせるにはどうすればよいですか?私はどこが間違っていますか?

  29. 29

    PythonのForループを間違って使用していますか?どうすればこれを解決できますか?

ホットタグ

アーカイブ