ReactにおいてReact-router-domを用いたルーティングのリファクタリングに挑戦しております。
その中でmap()を用いて繰り返しとなる部分をまとめようと思ったのですがうまくいきません。
pathの方は渡しているのがstring型なのでうまくいっており、実際に/aboutにアクセスすることができました。
しかし肝心のelementの方は自身が期待していた<About />コンポーネントではなく、'{<About />}'というstringがわたされてしまい
/aboutにアクセスすると'{<About />}'という文字列のみが表示されてしまいます。
テンプレートリテラルの他にも+演算子での文字列連結で表現しましたがうまくいきませんでした。
どのようにすればmapメソッド内においてRouteのelement属性に対しコンポーネントをわたすことができるでしょうか?
お力添えをお願いいたします。
なおバージョンは以下のとおりです。
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-router-dom": "^6.2.1",
"@types/react": "^17.0.38",
"@types/react-dom": "^17.0.11",
"@types/react-router-dom": "^5.3.3",
以下コードとなります。
index.tsx
1const Routing = () =>{ 2 return( 3 <Routes> 4 {['About', 'History', 'Skill', 'Work','Contact'].map(text => 5 ( 6 <Route path={'/'+text} element = {`{<${text} />}`} />//エレメント属性の中身がテキストになってしまう。 7 ))} 8 </Routes> 9 ) 10} 11 12ReactDOM.render( 13 <React.StrictMode> 14 <ThemeProvider theme={darkTheme}> 15 <CssBaseline /> 16 <BrowserRouter> 17 <Routing/> 18 19 {/* <Routes> 20 <Route path="/about" element = {<About />} /> 21 <Route path="/history" element = {<History />} /> 22 <Route path="/skill" element = {<Skill />} /> 23 <Route path="/work" element = {<Work />} /> 24 <Route path="/contact" element = {<Contact />} /> 25 </ Routes>*/ }これらをRoutingコンポーネントにわけてリファクタリングしたい。 26 27 28 </BrowserRouter> 29 <TemporaryDrawer /> 30 </ThemeProvider> 31 </React.StrictMode>, 32 document.getElementById('root') 33);
回答2件
あなたの回答
tips
プレビュー
2022/02/05 03:14