React 组件接收 props 为未定义
2017-07-25
837
我为学校档案系统建立了一个项目,其中我使用 React 构建了前端。在管理页面的主要组件上,我希望有一个 react-router 来浏览管理对话框。当我尝试实现这一点时,出现了以下问题:当尝试通过 react 路由组件将参数传递给类时,子组件没有收到任何 props。
我有以下 react 组件层次结构:
class Test extends React.Component {
constructor() {
super();
console.log("in class: " + this.props)
}
render() { return <div>test</div>}
}
class AdminPage extends BasicPage {
/* Other class functions here... */
render() {
let pageBody = "";
if(!this.state.isLoading)
pageBody = (
<Router>
<Switch>
<Route path={"/:schoolName/admin"} component={AdminMenu} exact/>
<Route path={"/:schoolName/admin/view/:id"} exact
component={() => <Test par1="abc" />} />
</Switch>
</Router>
);
return (
<Layout title={ this.state.isLoading ?
TITLE_UNTIL_LOADED :
PAGE_TITLE + this.state.schoolPrefs.heb_name}
subtitle={ this.state.subtitle }
notification={ this.state.notification }
isLoading={ this.state.isLoading }
>
{pageBody}
</Layout>
);
}
}
当我转到
/Random Name/admin/view/someID
时,它会在控制台上打印
in class: undefined
。
然后我想看看问题是出在传递组件还是接收组件上。我将函数
otherTest(props)
定义如下:
function otherTest(props) {
console.log("Function props: " + props);
return (<Test {...props} />);
}
然后像这样更改路由组件:
<Route path={"/:schoolName/admin/view/:id"} exact
component={otherTest} />
当我转到
/Random Name/admin/view/someID
时,我看到该函数正常接收了 props,但
<Test … />
内的日志仍然打印
undefined
。
我也尝试在主渲染函数中的
{pageBody
变量后添加
<Test param1=”123” />
,但它也打印了
in class: undefined
。
有人知道问题可能出在哪里吗?
谢谢。
2个回答
您必须从构造函数中获取 props 参数,然后将其传递给 super。
constructor(props){
super(props);
}
mehmet baran
2017-07-25
不要在构造函数中使用 this.props,因为构造函数仅在创建类时触发。 使用此代码:
constructor(props) {
super(props);
console.log(props);
}
Artem Mirchenko
2017-07-25