前提・実現したいこと
下記のサンプルは1〜3の数字の配列から、数字とその数字が偶数かを丸バツで判定したリストをレンダリングするものです。
CodeSandBoxで作成しました。
サンプル
関数が返すオブジェクトの値をレンダリングしたいです。
発生している問題・エラーメッセージ
エラーは発生していませんが、各値が空の状態でレンダリングされています。
該当のソースコード
jsx
1const array = [1, 2, 3]; 2 3const App = () => { 4 const renderArray = array.map(num => { 5 const checkEvenNum = async num => { 6 const result = num % 2; 7 const resultObj = await getResultObj(result); 8 return resultObj; 9 }; 10 11 const getResultObj = async result => { 12 if (result === 0) return { check: "○", num: num }; 13 return { check: "×", num: num }; 14 }; 15 16 return ( 17 <li key={num}> 18 <p>数字: {checkEvenNum(num).num}</p> 19 <p>偶数: {checkEvenNum(num).check}</p> 20 </li> 21 ); 22 }); 23 24 return <ul>{renderArray}</ul>; 25};
試したこと
関数の実行が終わる前にレンダリングされるため値が空なのかなと思い、下記のようにasync/await
を加えました
jsx
1const renderArray = array.map(async num => { 2... 3 4return ( 5 <li key={num}> 6 <p>数字: {await checkEvenNum(num).num}</p> 7 <p>偶数: {await checkEvenNum(num).check}</p> 8 </li> 9);
すると、下記のエラーが表示されました。
Objects are not valid as a React child (found: [object Promise]). If you meant to render a collection of children, use an array instead. in ul (at App.js:26) in App (at src/index.js:9) in StrictMode (at src/index.js:8)
エラーメッセージをそのまま検索すると、原因はpropsの受け取りを{}
で囲っていないため、という旨の記事を見つけたのですが、propsを受け取るコンポーネントが無いので、原因がわかりませんでした。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/25 09:43