Reactjs 反应-无法读取属性';参数';未定义的
我在路线上设置了参数。它们从我的组件出现在控制台中,但我得到一个“未定义”错误 如果我可以在控制台中看到它们,为什么仍然会出现错误 未处理的拒绝(TypeError):无法读取未定义的属性“params”Reactjs 反应-无法读取属性';参数';未定义的,reactjs,routes,Reactjs,Routes,我在路线上设置了参数。它们从我的组件出现在控制台中,但我得到一个“未定义”错误 如果我可以在控制台中看到它们,为什么仍然会出现错误 未处理的拒绝(TypeError):无法读取未定义的属性“params” 您需要确保导入的是正确的路线,即数据 import Data from './Data'; ... <Route exact path='/data/:param' component={Data} /> ... 另外,在执行componentDidMount()时,可
您需要确保导入的是正确的
路线,即数据
import Data from './Data';
...
<Route exact path='/data/:param' component={Data} />
...
另外,在执行componentDidMount()
时,可能不需要async
。这也可能是您需要添加上述防御性代码的原因
PS:console.log()
可以显示计算数据,通常在对象eval之外用i
表示。您需要确保导入的路径是正确的,该路径是数据
import Data from './Data';
...
<Route exact path='/data/:param' component={Data} />
...
另外,在执行componentDidMount()
时,可能不需要async
。这也可能是您需要添加上述防御性代码的原因
PS:console.log()
可以显示计算数据,通常在对象eval之外用i
表示。可以包含数据的导出
行吗?我添加了它。只是默认输出为什么不使用路由器(数据)?您说它记录得很好,那么错误实际发生在哪里?withRouter
是一个将路由道具注入组件的HOC。在访问诸如sothis.props.match…
之类的道具之前,您需要这些道具。您可以为数据添加导出
行吗。只是默认输出为什么不使用路由器(数据)?您说它记录得很好,那么错误实际发生在哪里?withRouter
是一个将路由道具注入组件的HOC。在访问诸如sothis.props.match…
之类的道具之前,您需要这些道具。谢谢您的回答。我之所以使用async是因为fetch
。我张贴了我的错误图片。我相信我是正确的,我看到了你的形象。你试过防御密码了吗?因此,您需要检查防御性代码,以便在this.props.match
中查找任何内容,因为该匹配尚未生效。检查哪个是:this.props.match&&this.props.match.params.param
我不熟悉防御代码。你的意思是什么?在你的组件didmount
中使用它:this.props.match&&this.props.match.params.param
这样你就不会在未定义匹配时出错-因为匹配还不可用,而且函数是异步的。恭喜!在本例中,由于生命周期方法componentDidMount()
是async
,因此我猜您会看到props.match
还不可用时的中间状态。更好的方法是调用componentDidMount()
内部的fetch()
,方法是从这里删除async/wait
,并在fetch()
中的数据到达后使用另一个名为componentdiddupdate()
的生命周期方法更新组件。这将意味着额外的render(),但它将确保您不会看到中间状态。谢谢您的回答。我之所以使用async是因为fetch
。我张贴了我的错误图片。我相信我是正确的,我看到了你的形象。你试过防御密码了吗?因此,您需要检查防御性代码,以便在this.props.match
中查找任何内容,因为该匹配尚未生效。检查哪个是:this.props.match&&this.props.match.params.param
我不熟悉防御代码。你的意思是什么?在你的组件didmount
中使用它:this.props.match&&this.props.match.params.param
这样你就不会在未定义匹配时出错-因为匹配还不可用,而且函数是异步的。恭喜!在本例中,由于生命周期方法componentDidMount()
是async
,因此我猜您会看到props.match
还不可用时的中间状态。更好的方法是调用componentDidMount()
内部的fetch()
,方法是从这里删除async/wait
,并在fetch()
中的数据到达后使用另一个名为componentdiddupdate()
的生命周期方法更新组件。这将意味着额外的render(),但它将确保您不会看到中间状态。
import Data from './Data';
...
<Route exact path='/data/:param' component={Data} />
...
componentDidMount() {
console.log(this.props.match && this.props.match.params.param);
}