2022 React 最速上手指南(九)—— 受控组件 & 单向数据流

简介: 2022 React 最速上手指南(九)—— 受控组件 & 单向数据流

以结果为导向,写给刚学完前端三剑客和想要了解 React 框架的小伙伴,使得他们能快速上手(省略了历史以及一些不必要的介绍)。



受控组件


你可能会发现:如果在开始就赋予了 searchTerm 一个初始 state,那么输入框就只会反馈被过滤后的列表,而不展示它的初始 state,如图:


const [searchTerm, setSearchTerm] = React.useState("React");


image.png



因此我们需要把 Search 组件和其内部的输入框转换成一个【受控组件】,可以通过改变输入框的 value 属性来获取正确的初始值:


const Search = (props) => (
  <>
    <label htmlFor="search">Search: </label>
    <input
      id="search"
      type="text"
      onChange={props.onSearch}
      value={props.searchTerm}
    />
    <p>
      Searching for <strong>{props.searchTerm}</strong>.
    </p>
  </>
);
复制代码


每当改变了 searchTerm 的值,我们会通过 props 强制输入框使用 React state 中的值,而不是仅仅以原生 HTML 的方式管理内部状态。


单向数据流


image.png



通过上面的数据流向,我们会发现 React 中【单向数据流】的概念:


image.png



一个 React 应用和其中的的组件一开始都有一个初始的 state,并且可能会通过 props 的方式向下传递给其他组件,然后被渲染为 UI。当【副作用】产生时(比如用户输入或者远端 API 加载数据),所有被改变的 state ,或暗中被改变的也就是被 props 影响的组件将会重新渲染(组件的函数会被重新调用)。


这也侧面说明了 React 组件的生命周期:


  • 首先 React 中的所有组件会在组件树中从上而下地被实例化,也包含所有基于初始值实例化的 hooks
  • 一旦副作用产生,state 改变,所有受到影响的组件会重新渲染(被改变的 state 或 props 影响)
  • 重新渲染也就意味着:从 hooks 中使用最新值来重新调用组件的函数
  • hooks 只会在组件第一次渲染时【初始化一次】,之后 React 会在内部追踪其最新值


所谓副作用(Side Effect),通俗点讲就是函数在执行时做了与返回值无关的事情,比如修改了全局变量,修改了传入的参数,或者调用了 console.log() 等等。

与副作用相对还有一个概念:纯函数(Pure function),其返回结果只依赖于它的参数,并且没有任何副作用产生;纯函数这个概念放到 React 中就是 Pure component,传入相同的 props,永远只会渲染出相同的视图。

目录
相关文章
|
2月前
|
缓存 前端开发 JavaScript
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
🌟蒋星熠Jaxonic,前端探索者。专注React Hooks深度实践,从原理到实战,分享状态管理、性能优化与自定义Hook精髓。助力开发者掌握函数组件的无限可能,共赴技术星辰大海!
React Hooks深度解析与最佳实践:提升函数组件能力的终极指南
|
7月前
|
缓存 前端开发 数据安全/隐私保护
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
275 68
|
7月前
|
缓存 前端开发 Java
在 React 中,组合组件和高阶组件在性能方面有何区别?
在 React 中,组合组件和高阶组件在性能方面有何区别?
254 67
|
7月前
|
前端开发 JavaScript 安全
除了高阶组件和render props,还有哪些在 React 中实现代码复用的方法?
除了高阶组件和render props,还有哪些在 React 中实现代码复用的方法?
288 62
|
10月前
|
移动开发 前端开发 API
React 音频播放器组件 Audio Player
本文介绍如何使用React创建音频播放器组件,涵盖核心功能如播放/暂停、进度条、音量控制和时间显示。通过HTML5 `&lt;audio&gt;` 元素和React的声明式状态管理,实现交互式音频播放。常见问题包括控件不响应、进度条无法更新和音量控制失灵,并提供解决方案。此外,还讨论了浏览器兼容性、异步错误处理和性能优化等易错点及避免方法。
711 123
|
9月前
|
前端开发 JavaScript
除了使用Route组件,React Router还有其他方式处理404错误页面吗
除了使用Route组件,React Router还有其他方式处理404错误页面吗
248 58
|
9月前
|
前端开发
React 中高阶组件的原理是什么?
React 中高阶组件的原理是什么?
238 57
|
9月前
|
前端开发 开发者
除了函数组件和类组件,React 还有其他创建组件的方式吗?
除了函数组件和类组件,React 还有其他创建组件的方式吗?
185 57
|
9月前
|
前端开发
如何在React Router中定义404错误页面组件?
如何在React Router中定义404错误页面组件?
231 57
|
9月前
|
前端开发
在 React 中使用高阶组件时,如何避免命名冲突?
在 React 中使用高阶组件时,如何避免命名冲突?
222 56