React-Router:用<Switch>包裹路由数组映射时出现错误
解决React Router Switch下动态路由的computedMatch警告问题
这个问题我之前也碰到过!核心原因是Switch组件只能直接包含
里面,导致Switch把内部用到的
computedMatch prop传递给了这个DOM元素——而DOM元素根本不认识这个属性,所以就触发了警告。
修正方案:移除Route外层的div,直接将key绑定在Route上
你只需要把map里的
去掉,把组件上就可以了,代码修改如下:
key属性直接加到const sections = ['section1', 'section2', 'section3']; <Switch> {/* 若浏览器仅加载/section/,重定向至第一个路由 */} <Route exact path="/section" render={() => (<Redirect to="/section1/home" />)} /> {/* 遍历sections数组(移除外层div,key移到Route上) */} {this.state.sections.map((section, sectionIndex) => ( <Route key={sectionIndex} path={`/section/${section}/home`} render={() => (<Section testProp={'test'} />)} /> ))} {/* 404页面 */} <Route component={NoMatch} /> </Switch>
额外优化建议
- 用ES6模板字符串拼接路径(
/section/${section}/home)比加号拼接更简洁易读; - 如果
sections数组里的每个section值是唯一的,建议用section作为key(而不是index),这能避免列表渲染时的性能问题; - 始终确保Switch的直接子元素只有
或 ,不要嵌套任何其他DOM组件或自定义组件。
这样修改后,Switch会把computedMatch正确传递给
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

