• 面试题-React(十二):React中不可变数据的力量


    一、不可变数据的概念

    不可变数据意味着数据一旦创建,就不能被更改。在React中,每次对数据的修改都会返回一个新的数据副本,而不会改变原始数据。这种方式确保了数据的稳定性和一致性。

    二、Props中的不可变数据

    在React中,组件的Props应该始终保持不可变。这意味着在父组件向子组件传递Props时,不应该直接修改传递的数据。

    代码示例:

    class ParentComponent extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          message: 'Hello',
        };
      }
    
      render() {
        return ;
      }
    }
    
    class ChildComponent extends React.Component {
      render() {
        return 
    {this.props.message}
    ; } }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在上述代码中,父组件向子组件传递了message属性。由于Props是不可变的,子组件不能直接修改message属性的值。

    三、State中的不可变数据

    在React中,组件的State也应该保持不可变。每次更新State时,都应该返回一个新的State对象,而不是直接修改原始State。

    代码示例:

    class MyComponent extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          count: 0,
        };
      }
    
      incrementCount() {
        //this.setState({ count: this.state.count + 1 }); // 不推荐的方式
        let count = this.state.count
        this.setState({ count: count + 1 }); //推荐
      }
    
      render() {
        return (
          

    Count: {this.state.count}

    ); } }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在上述代码中,虽然可以直接修改this.state.count,但这样的做法不是推荐的。应该使用setState来返回一个新的State对象。

    四、不可变数据的优势

    使用不可变数据有许多优势:

    1. 易于追踪变化: 当数据不可变时,每次变化都会生成新的数据对象,更容易跟踪和理解数据的变化过程。
    2. 性能优化: React可以通过比较新旧数据对象,确定何时进行渲染,从而提升性能。
    3. 避免副作用: 直接修改数据可能导致副作用和难以预料的错误。不可变数据可以减少这些问题。
    4. 时间旅行调试: 使用不可变数据,可以更轻松地实现时间旅行调试,即查看应用在不同时间点的状态。
  • 相关阅读:
    C++智能指针
    WebKit策略:<foreignObject>可用于绘制svg中的html标签,但与<use>搭配不生效
    创建表练习
    Mysql多表设计
    Java8 Lambda 表达式
    飞致云及其旗下1Panel项目进入2023年第三季度最具成长性开源初创榜单
    java版Spring Cloud+Mybatis+Oauth2+分布式+微服务+实现工程管理系统
    图论第4天
    生产管理系统--制造订单
    Hudi数据湖相关资料
  • 原文地址:https://blog.csdn.net/weixin_42560424/article/details/133803608