当前位置: 首页 > 知识库问答 >
问题:

React Router 4-组件WillReceiveProps()未激发

艾志尚
2023-03-14

我用的是4号路由器。

当我渲染组件与渲染参数组件WillReceiveProps()它不火的第一次,所以我需要点击两次发送道具到组件。

我呈现如下:

const CartRoute = (props) => (<Cart itemsInCart = {this.state.itemsInCart} deleteItemFromCart = {this.deleteItemFromCart} {...props} />);
.....
  <Switch>
    .....
    <Route path="/cart" render={CartRoute} />
  </Switch>

如果没有路由器(当所有组件都在同一个页面上),它的工作正常。

以下是详细说明:

反应路由器-需要点击链接两次才能将道具传递给组件

共有1个答案

谷梁子昂
2023-03-14

我认为原因很简单,根据文件

React不调用组件将在安装过程中使用初始道具接收道具。它只在组件的某些道具可能更新时调用此方法。componentWillReceiveProps()在装入的组件接收新的道具之前被调用。

当第一次渲染组件时,组件不会被调用,在那时组件会被调用,当您在道具值中做任何更改时,只有组件会被触发。所以第一次,如果你想做一些计算,那么在组件didMount方法中这样做:

componentDidMount(){
   console.log('props values', this.props); //it will print the props values
}

组件WillReceiveProps是一种更新生命周期方法,而不是装载方法。

安装方法:

在创建组件实例并将其插入DOM时,将调用这些方法。

更新方法:

道具或状态的更改可能会导致更新。这些方法在重新呈现组件时调用。

检查安装和更新生命周期方法之间的区别。

 类似资料:
  • 我是React.js的新手。在试图理解React中的生命周期时,我偶然发现了组件WillReceiveProps。即使我掌握了其他功能,我仍然无法确定组件是否会接收道具。我创建了一个小片段,每次单击按钮时,我都会递增变量“val”。当val变为5的倍数时,我想更改“递增”的值,但我无法这样做。 我的代码是: 有线索吗?提前谢谢

  • 我第一个反应项目的第一个问题。 我试图找出如何在特定的onClick链接上对组件产生最佳效果,以便能够重新触发此效果,而不受页面上其他链接的影响。前两个问题是有效的,但我似乎没有其他链接不影响组件。 我有一个DisplayLightbox组件在我的页面上接受几个值 我想要触发lightbox的链接正在调用一个设置状态(并发送道具)的函数。这部分似乎很好用。 在我的DisplayLightbox组件

  • 所以我正在重写一个带有钩子的组件,我遇到了一个有趣的挑战,我需要用钩子模仿的一些旧行为。 我的旧代码如下所示: 你看,我正在基于nextrops启动一个,然后在语句中,我基于该nextVal进行了一些检查,现在,我知道我们可以为指定第二个参数,以便仅在道具更改时运行它,但是这些检查呢,如何实现类似于?

  • 如何从React Router v4中的函数重定向到页面? 我可以从组件中找到很多关于导航的引用,在我的情况下,我需要从函数中导航

  • 问题内容: 当我使用OSGi声明式服务在片段内创建组件时,该组件未激活,但主机捆绑包中的组件被激活。我想念什么吗?我的片段具有用于主机捆绑包符号名称的正确文件条目。 我以这种方式宣布一个伴侣 问题答案: 因为从不启动捆绑包片段,所以永远不会激活其中的仅已解析声明式服务组件。该规范特别指出片段中的Service- Component标头(将注释转换为标头)将被忽略。 您可以使声明性服务适用于片段,但

  • 问题内容: 所以我重新写带钩的分量,我遇到了一个有趣的挑战,我需要模拟天生的一些老问题与困境。 我的旧代码如下: 您会看到,我正在基于nextProps 发起一个a ,然后在语句中我基于nextVal 进行了几次检查,现在,我知道我们可以指定第二个参数以仅在prop更改时运行它,那检查,我怎样才能实现类似于? 问题答案: 您可以创建自定义钩子: 并将其用于