这是适用于...推向不同路线的代码
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);
}
但是我不应该仍然可以接收正在发送的道具吗?
还有其他方法可以将道具发送到其他组件吗?这些组件不是父组件和子组件,因此不能真正通过像这样的道具。
更多详细信息:这是一项功能,用户可以获取消息通知,并转到他/她单击的特定消息的消息页面。现在,当出现通知时,用户可能已经在该页面上。在这种情况下,当用户单击新消息时,我们仍然需要显示它。尽管它被带到了不同的路线,但是当客户已经在该页面上时,它也应该可以工作,希望这可以使它更加清晰
答案 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
});
}