从同一路径推动组件时,组件无法接收道具-反应路由器

时间:2018-06-21 05:54:54

标签: reactjs react-router

这是适用于...推向不同路线的代码

sendToMessage = (item)=>{
    let path = '/messages';
    this.props.history.push({
      pathname:path,
      state:{
        clientid:item.clientid,
        clientname:item.clientname
      }
    });
  }

因此,当我从其他路线单击该项目时,它可以正常工作,并且组件可以接收发送的道具

但是当我已经在/ messages页面上并单击该项目时,我没有收到道具,因此可以使用新数据更新页面。 为什么会这样?

我希望它适用于所有情况, 无论是来自同一条路线还是来自不同的路线。

现在,我确实收到此警告

Hash history cannot PUSH the same path; a new entry will not be added to the history stack

这就是我尝试访问目标组件中的道具的方式

 componentWillReceiveProps(nextProps) {
    console.log('nextPRops : ',nextProps);

  }

但是我不应该仍然可以接收正在发送的道具吗?

还有其他方法可以将道具发送到其他组件吗?这些组件不是父组件和子组件,因此不能真正通过像这样的道具。

更多详细信息:这是一项功能,用户可以获取消息通知,并转到他/她单击的特定消息的消息页面。现在,当出现通知时,用户可能已经在该页面上。在这种情况下,当用户单击新消息时,我们仍然需要显示它。尽管它被带到了不同的路线,但是当客户已经在该页面上时,它也应该可以工作,希望这可以使它更加清晰

2 个答案:

答案 0 :(得分:1)

方法1: 您可以使用redux在redux中存储clientid和clientname,并且始终从redux存储中访问它,因此,您可以尝试在redux存储中更新数据,而无需尝试路由,这将触发您的componentWillReceiveProps函数

方法2: 另一种解决方案是更改路由路径,以防万一您拥有像client这样的路径名-将路径更改为client /:clientid-如果您以这种方式使用路由,那么当您尝试从同一组件进行路由时,您不会收到警告到同一组件

答案 1 :(得分:0)

正如react-router所警告的那样,您不能push进入同一页面。

或者,您可以/应该使用组件的state,通过更新组件状态,它将重新呈现组件。

state = {
    clientid: '',
    clientname: ''
}

sendToMessage = (item) => {
    this.setState({
        clientid: item.clientid,
        clientname: item.clientname
    });
}