React数据流

单向数据流

        React是单向数据流的js框架,即数据只会朝一个方向流动,由父组件到子组件进行传递和更新。

        React的核心思想就是UI = Render(data),data就是数据,Render()是React提供的纯函数,所以用户界面的展示完全取决于数据。

        这里说一下数据和状态的概念:

        状态: React是利用可复用的组件来构建界面,组件本质上是一个有限状态机,它能够记住当前所处的状态,并且能够根据不同的状态变化做出相应的操作。在React中,把这种状态定义为state,用来描述该组件对应的当前交互界面,表示当前界面展示的一种状况,React正是通过管理状态来实现对组件的管理。当state变化时,React会自动执行操作:绘制界面。

        数据:数据比较广泛,不只包括后端返回给前端的数据,React的状态也是一种数据。

React自身的数据流管理方案:

        React是自上而下的单向数据流,容器组件&展示组件是最常用的组件设计方案。容器组件负责处理复杂的业务逻辑和数据,展示组件负责处理UI层。通常我们会将展示组件抽出来进行封装和复用。容器组件自身通过state来管理状态,setState更新状态,从而更新UI,将自身的状态通过props传递给展示组件实现通信。

组件的简单化实现

        类组件的本质,是类。类的本质,是函数。函数组件的本质,也是函数。也就是说,组件的本质,是函数。

        那么组件嵌套组件实例的方式,其实就是函数嵌套函数实例化对象。运行下面代码:

        function child(props) {
            this.props = props
        }

        function parent(props) {
            this.props = props

            this.state = '我是父函数的一个状态'
            this.childNodes = new child(this.state)
        }

        console.log('=======', new parent('传给父函数的属性'))

这就是简单的通过props实现单向数据流。

对比一下React组件代码:

      class Child extends react.Component {
            state = {
                ...this.props
            }

            render() {
                return (
                    <div>我是子组件</div>
                )
            }
        }

        class Father extends react.Component {
            state = {
                data: '我是父组件状态'
            }

            render() {
                return (
                    <Child data={this.state.data}></Child>
                )
            }
        }

是不是很想,因为组件的本质是函数。

为什么是单向数据流

        单向数据流最大的好处是所有状态改变可溯源。

        组件就是函数,props就是函数的传参。假如组件内部可以随意改变父组件甚至祖宗组件的状态,相当于在函数内部改变了入参,那么这个函数就产生了副作用,这会使函数变的不可测试,不可预测执行结果,不可维护。单向数据流就保证了父组件状态不会被子组件修改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jsonbro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值