反応フックである機能コンポーネントでAPI呼び出しを行い、その結果に基づいて、コンポーネントのコンテンツを再レンダリングしようとしています。これがコードです:
APIを呼び出しているコンポーネント
function IntegrationDownshift() {
render(
<Paper square>
{setResults(inputValue).map(
(suggestion, index) =>
renderSuggestion({
suggestion,
index,
itemProps: getItemProps({
item:
suggestion.userFullName
}),
highlightedIndex,
selectedItem
})
)}
</Paper>
);
}
これがsetResults
関数です:
function setResults(textInput) {
const [data, setData] = useState({ users: [] });
searchUser(textInput).then(result => {
useEffect(() => {
searchUser(textInput).then(result => {
setData(result.users);
});
}, []);
});
}
状態のデータを取得し、データに基づいてコンポーネントを再レンダリングしようとしています。ここでsearchUser
は、外部APIを呼び出すアクション内にあります。
searchUser
はアクションを呼び出してデータを正常にフェッチしていますが、状態が更新されている理由がわかりません-以下のエラーが発生しました-React Hook "useState"は、関数 "setResults"で呼び出されますが、これはReact関数コンポーネントでもカスタムでもありませんReactフック関数react-hooks/rules-of -フック
私はフックに不慣れで、ヘルプ/ポインターは役に立ちます。
React機能コンポーネントの名前は大文字文字で始める必要があります。 setResults
からSetResults
を操作すると、機能します。
また、フックは通常のJavaScriptクラスではサポートしていないため、SetResults
という名前で他のコンポーネントを作成してみてください。そしてそれをメインコンポーネントに含めます
実際、setResultsは次のように大文字にする必要があります
function SetResults(){...} // S capitalized here
注:反応フックを使用していない場合は、関数名の最初の文字を大文字にする必要はありませんが、フックを使用すると、関数の最初の文字が大文字になると想定されます。
同様の問題がここで議論され、
React Hook "useState"は、React関数コンポーネントまたはカスタムReactフック関数 のどちらでもない関数 "app"で呼び出されます
フックを使用すると、基本的には、状態やその他のReactクラスコンポーネント機能を関数コンポーネントで使用できます。したがって、通常のJavaScript関数でフックを呼び出すことはできません。関数コンポーネントの最上位レベルでのみ実行できますまたはカスタムフックで。
このようにフックで考えてください:
React docsには、フックを使用するためのルールを説明するセクションがあります。