React router v4.2.2:在 Route 的组件 prop 中使用字符串而不是函数导致错误
React router v4.2.2: using a string instead of function inside component prop of Route results in error
我正在使用 react-router v4.2.2 并尝试使用一个函数来吐出一个路由列表,其组件 属性 值为 "project.title",取自减速器我在用。但是,当我写:
return <Route key={i} exact path={`/${project.title}`} exact component={project.title}/>
使用 project.title 部分会导致此错误:
Failed prop type: Invalid prop component
of type string
supplied
to Route
, expected function
.
但是当我用像 Project1 这样的实际组件替换 project.title 时:
return <Route key={i} exact path={`/${project.title}`} exact component={Project1}/>
那就好了。
有没有一种方法可以在这个函数中使用我的 reducer 中的每个项目的标题,而不会弹出这个错误?
这里是整个容器代码,希望对您有所帮助:
import React from 'react';
import Project1 from '../components/project1.js';
import { connect } from 'react-redux';
import { Route, Switch } from 'react-router-dom';
import { withRouter } from 'react-router';
import ProjectCards from '../containers/project_cards.js';
class App extends React.Component{
render() {
var createRoutes = this.props.projects.map((project, i) => {
return <Route key={i} exact path={`/${project.title}`} exact component={project.title}/>
});
return (
<Switch>
<Route exact path="/" component={ProjectCards}/>
{createRoutes}
</Switch>
);
}
}
function mapStateToProps(state) {
return {
projects: state.projects
};
}
export default withRouter(connect(mapStateToProps)(App));
你不能只传递一个字符串作为路由的组件——它需要一个实际的组件。我建议将所有组件保存在某种对象中,然后您可以访问该对象:
const projects = {
Project1,
…
};
…
<Route key={i} exact path={`/${project.title}`} exact component={projects[project.title]}/>
我正在使用 react-router v4.2.2 并尝试使用一个函数来吐出一个路由列表,其组件 属性 值为 "project.title",取自减速器我在用。但是,当我写:
return <Route key={i} exact path={`/${project.title}`} exact component={project.title}/>
使用 project.title 部分会导致此错误:
Failed prop type: Invalid prop
component
of typestring
supplied toRoute
, expectedfunction
.
但是当我用像 Project1 这样的实际组件替换 project.title 时:
return <Route key={i} exact path={`/${project.title}`} exact component={Project1}/>
那就好了。
有没有一种方法可以在这个函数中使用我的 reducer 中的每个项目的标题,而不会弹出这个错误?
这里是整个容器代码,希望对您有所帮助:
import React from 'react';
import Project1 from '../components/project1.js';
import { connect } from 'react-redux';
import { Route, Switch } from 'react-router-dom';
import { withRouter } from 'react-router';
import ProjectCards from '../containers/project_cards.js';
class App extends React.Component{
render() {
var createRoutes = this.props.projects.map((project, i) => {
return <Route key={i} exact path={`/${project.title}`} exact component={project.title}/>
});
return (
<Switch>
<Route exact path="/" component={ProjectCards}/>
{createRoutes}
</Switch>
);
}
}
function mapStateToProps(state) {
return {
projects: state.projects
};
}
export default withRouter(connect(mapStateToProps)(App));
你不能只传递一个字符串作为路由的组件——它需要一个实际的组件。我建议将所有组件保存在某种对象中,然后您可以访问该对象:
const projects = {
Project1,
…
};
…
<Route key={i} exact path={`/${project.title}`} exact component={projects[project.title]}/>