Reactjs 反应-无法读取属性';参数';未定义的

Reactjs 反应-无法读取属性';参数';未定义的,reactjs,routes,Reactjs,Routes,我在路线上设置了参数。它们从我的组件出现在控制台中,但我得到一个“未定义”错误 如果我可以在控制台中看到它们,为什么仍然会出现错误 未处理的拒绝(TypeError):无法读取未定义的属性“params” 您需要确保导入的是正确的路线,即数据 import Data from './Data'; ... <Route exact path='/data/:param' component={Data} /> ... 另外,在执行componentDidMount()时,可

我在路线上设置了参数。它们从我的组件出现在控制台中,但我得到一个“未定义”错误

如果我可以在控制台中看到它们,为什么仍然会出现错误

未处理的拒绝(TypeError):无法读取未定义的属性“params”


您需要确保导入的是正确的
路线,即
数据

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。在访问诸如so
this.props.match…
之类的道具之前,您需要这些道具。您可以为
数据添加
导出
行吗。只是默认输出为什么不使用路由器(数据)?您说它记录得很好,那么错误实际发生在哪里?
withRouter
是一个将路由道具注入组件的HOC。在访问诸如so
this.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);
}