React | 单向数据流

在分析之前,先熟悉Vue和React的数据流~

1、数据流

在 Vue 和 React 中,数据流都是单向的。

单向: 也就意味从父组件传递数据到子组件,而子组件无法直接修改父组件的数据。

需要修改数据: 子组件触发事件通知父组件更新数据,实现数据同步。

这就是平时在日常开发中单向数据流的简要描述。

2、双向数据绑定

可能我们都有过类似疑问,平时用react不也是使用v-model指令

为什么很少听到React聊双向数据绑定?

  • 那是因为在 React 中,v-model 不是原生支持的语法,需要依赖第三方库或者自定义组件来实现类似双向绑定功能,

  • 很多 UI 库(比如 Ant Design、Material-UI 等)提供类似 v-model 的 API,

  • 通过这些 API 可以在 React 中实现类似 Vue 中 v-model 的双向数据绑定效果。

而在Vue 中,v-model 是内置指令,可以直接用于 input、textarea、select 等表单元素,以实现双向数据绑定。

也是因我们日常开发都是基于UI 库,所以没有几乎注意到这个差别~

那在React中,不依赖第三方库,能不能实现双向数据绑定?

这就需要引入一个新概念:受控组件

举个例子如下:

import React, { useState } from 'react';

function App() {
  // 定义一个状态来保存输入框的值
  const [inputValue, setInputValue] = useState('');

  // 定义一个处理输入变化的事件处理函数
  const handleChange = (event) => {
    // 当输入框的值发生变化时,更新状态中保存的值
    setInputValue(event.target.value);
  };

  return (
    <div>
      {/* 使用受控组件,value 属性绑定到状态中保存的值,并且通过 onChange 事件更新状态 */}
      <input type="text" value={inputValue} onChange={handleChange} />
      {/* 显示输入框的值 */}
      <p>Input value: {inputValue}</p>
    </div>
  );
}

export default App;

创建一个受控文本输入框,其值由组件状态 inputValue 控制。

当输入框的值发生变化时,handleChange 函数会更新组件的状态,从而实现数据的双向绑定。

通过以上案例可知:相对于 Vue 来说,在React中需要更多的代码来实现数据的双向绑定。

React的设计理念更加注重单向数据流。

我想这也是为什么很少听到在React中讨论双向数据绑定的原因吧~