状态更改不重新渲染组件

弗拉基米尔·马顿

我在任何地方都找不到答案,因为没有什么对我有用,所以我开始了一个新话题。请不要将其标记为重复


路由器.js:

<Switch>
   <Route path="/" exact component={Home} />
   <Route exact path="/p/:uid" component={Profile} />
</Switch>

配置文件.js

constructor(props) {
  super(props);
  this.state = {
    loading: true,
    profile_user_id: this.props.match.params.uid,
  };
}

然后,稍后在 Profile.js 中,我触发 fetch 从后端获取数据并使用 this.setState({ ... }) 将此数据保存到状态。当 Profile 组件被渲染时,一切看起来都很好。

在 Router.js 中,还有一个 Link:

<Link to={"/p/" + this.state.ntuser.tag}>Profile</Link>

.. 应该转到您自己的个人资料。因此,当您的用户 ID 为 1,并且您访问 ID 为 22 的用户的个人资料时,您的 URL 将是 /p/user22 并且链接将指向 /p/user1。

问题是,即使配置文件呈现得很好,当您单击链接时,配置文件组件也不会重新呈现(它应该将您定向到 /p/user1 并显示您的配置文件)。我也尝试将位置从 react-router 保存到状态,因此每次 URL 更改时,它都会在 componentWillReceiveProps() 中捕获并在我更新状态内。但还是什么都没有。有任何想法吗?

PS:我正在使用 React.Component

xadm

console.log(this.props.match.params.uid)constructor,componentDidMount()componentDidUpdate()(UNSAFE_componentWillReceiveProps()已弃用)

数量和位置(日志调用)将告诉您组件是重新创建(许多构造函数调用)还是更新(cDM 调用)。相应地移动您的数据获取调用(进入 cDM 或 cDU ... 或 sCU)。

您可以在上面的组件中保存公共数据<Router/>(fe 使用上下文 api) - 但在这种情况下不需要这样做。


解决方案

您可以使用 componentDidUpdate() 或 shouldComponentUpdate()从更改的道具更新状态componentDidUpdate应该用条件保护以防止无限循环。请参阅文档

最简单的解决方案:

componentDidUpdate(prevProps) {
    if (this.props.some_var !== prevProps.some_var) {
        // prop (f.e. route '.props.match.params.uid') changed
        // setState() - f.e. for 'loading' conditional rendering
        // call api - use setState to save fetched data
        // and clearing 'loading' flag 
    }
}

shouldComponentUpdate() 可用于一些优化 - 最小化重新渲染。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

状态更改后,Redux反应不重新渲染组件

来自分类Dev

更改状态后屏幕不重新渲染

来自分类Dev

Redux 状态更改但不重新渲染

来自分类Dev

状态更改后,React不重新渲染,我该如何设置子组件的setState?

来自分类Dev

状态更改后从子组件重新渲染

来自分类Dev

更改存储状态后重新渲染组件

来自分类Dev

为什么状态更改后,React不重新渲染页面?

来自分类Dev

React路由器在状态更改后不重新渲染

来自分类Dev

更改道具时,React不重新渲染组件

来自分类Dev

组件不重新渲染-ReactJS

来自分类Dev

在React中重新渲染子组件或更改子状态

来自分类Dev

reactjs-更改状态不会重新渲染组件

来自分类Dev

当 prop 更改时,无状态组件不会重新渲染

来自分类Dev

反应setState不重新渲染组件

来自分类Dev

ReactiveVar不重新渲染React组件

来自分类Dev

为什么它的属性更改时,React组件为什么不重新渲染?

来自分类Dev

当RN 0.61中的状态更改时,如何从主组件中重新渲染子组件?

来自分类Dev

当父组件状态更改时,React路由组件会重新渲染

来自分类Dev

反应组件不会在父组件 firebase 的状态更改时重新渲染

来自分类Dev

React UseContext更改不重新呈现组件

来自分类Dev

在不重新渲染React组件的情况下,获取和设置数据(不是状态/属性)的正确方法是什么?

来自分类Dev

React 重新渲染重置组件的悬停状态

来自分类Dev

重新渲染时如何更新组件状态

来自分类Dev

当状态是对象的对象时组件重新渲染

来自分类Dev

React + MobX-不重新渲染更新到状态

来自分类Dev

当状态从钩子改变时,React不重新渲染

来自分类Dev

React:useEffect更新状态,但不重新渲染视图

来自分类Dev

React + MobX-不重新渲染更新到状态

来自分类Dev

第一次点击不重新渲染组件

Related 相关文章

  1. 1

    状态更改后,Redux反应不重新渲染组件

  2. 2

    更改状态后屏幕不重新渲染

  3. 3

    Redux 状态更改但不重新渲染

  4. 4

    状态更改后,React不重新渲染,我该如何设置子组件的setState?

  5. 5

    状态更改后从子组件重新渲染

  6. 6

    更改存储状态后重新渲染组件

  7. 7

    为什么状态更改后,React不重新渲染页面?

  8. 8

    React路由器在状态更改后不重新渲染

  9. 9

    更改道具时,React不重新渲染组件

  10. 10

    组件不重新渲染-ReactJS

  11. 11

    在React中重新渲染子组件或更改子状态

  12. 12

    reactjs-更改状态不会重新渲染组件

  13. 13

    当 prop 更改时,无状态组件不会重新渲染

  14. 14

    反应setState不重新渲染组件

  15. 15

    ReactiveVar不重新渲染React组件

  16. 16

    为什么它的属性更改时,React组件为什么不重新渲染?

  17. 17

    当RN 0.61中的状态更改时,如何从主组件中重新渲染子组件?

  18. 18

    当父组件状态更改时,React路由组件会重新渲染

  19. 19

    反应组件不会在父组件 firebase 的状态更改时重新渲染

  20. 20

    React UseContext更改不重新呈现组件

  21. 21

    在不重新渲染React组件的情况下,获取和设置数据(不是状态/属性)的正确方法是什么?

  22. 22

    React 重新渲染重置组件的悬停状态

  23. 23

    重新渲染时如何更新组件状态

  24. 24

    当状态是对象的对象时组件重新渲染

  25. 25

    React + MobX-不重新渲染更新到状态

  26. 26

    当状态从钩子改变时,React不重新渲染

  27. 27

    React:useEffect更新状态,但不重新渲染视图

  28. 28

    React + MobX-不重新渲染更新到状态

  29. 29

    第一次点击不重新渲染组件

热门标签

归档