#磐石 2022-01-13 10:26 采纳率: 0%
浏览 72

React中向路由组件state传参,history.action异常,如何解决?

问题遇到的现象和发生背景

在学习React编程式路由导航的时候,编写一个小案例。
这个案例实现的是,多级路由,动态实现新闻列表,点击新闻之后显示,新闻内容。

以下是新闻列表组件渲染的代码

render() {
    const {messageArr} = this.state
    return (
        <div>
            <ul>
                {
                    messageArr.map((obj) => {
                        return (<li key={obj.id}>
            
                            {/*向路由组件传递state参数*/}
                            <Link to={{pathname:'/home/message/detail',state:{detailObj: obj}}}>{obj.title}</Link>
                            &nbsp;<button onClick={()=>this.goto(obj,false)}>push</button>
                            &nbsp;<button onClick={()=>this.goto(obj,false)}>replace</button>
                        </li>)
                    })
                }
            </ul>
            <Route path='/home/message/detail' component={Detail}></Route>
            &nbsp;<button onClick={this.goback}>back</button>
            &nbsp;<button onClick={this.goForward}>forward</button>
        </div>
    );
}


遇到的问题是:
用params的形式传参,无论点击多少次新闻,在Detail组件中获得this.props.history.action为push。
但是用了state的形式传参,只有第一次点击的某一条新闻,this.props.history.action为push,之后点击的新闻,history的action为replace。Link中replace默认值为false,即使设定为显示设定,也是不起作用。

在Link组件后面,增加Button分别调用this.props.history.replace、this.props.history.push来实现跳转。
结果是和params的形式传参一样,在Detail组件中可以正确输出this.props.history.action的值

我用的react版本为17.0.2
react-router-dom版本为5.3.0。
请问,该如何处理才能在state的形式传参时,多次点击Link后都可以得到正确的this.props.history.action的值。

  • 写回答

1条回答 默认 最新

报告相同问题?

问题事件

  • 创建了问题 1月13日

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值