Advertisement

简述React受控组件与非受控组件(小结)

  • 5星
  •     浏览量: 0
  •     大小:None
  •      文件类型:PDF


简介:
本文对React框架中的受控组件和非受控组件进行对比总结,帮助开发者理解两者特性和应用场景。 React 中的受控组件与非受控组件是两种不同的表单处理方式。它们的主要区别在于是否能够由外部控制其值的变化。 一、非受控组件 在 React 中,非受控组件是指那些内部维护状态 state 的组件,而不是通过父级或外部的状态来管理自身数据的输入元素。这意味着一旦设置好初始值(通常使用 props),该值就不能再被修改了。例如,在下面的例子中,`Input` 组件设置了 `defaultValue` 属性作为其初始值: ```jsx ``` 在页面初始化时可以设置输入框的默认内容,但之后试图通过更改 props 来修改这个值是无效的。 二、受控组件 与非受控组件不同的是,受控组件的状态 state 是由外部控制和管理的。这意味着可以通过改变父级状态来直接更新这些元素中的数据。例如,在下面的例子中,我们创建了一个 `InputItem` 组件,并且通过监听输入事件(如 onChange)实时地更新其内部状态: ```jsx export default class InputItem extends React.Component { constructor(props) { super(props); this.state = { value: }; } componentWillReceiveProps(nextProps) { this.setState({ value: nextProps.value }); } _onChange(evt) { this.setState({ value: evt.target.value }); } render() { return ( ); } } ``` 在这里,我们设置了一个初始值,并且通过外部传递的 `value` 属性来修改输入框的内容。 三、对比与选择 | 类型 | 状态维护方式 | 值更新机制 | 使用场景 | | --- | --- | --- | --- | | 非受控组件 | 组件内部管理状态 state | 仅能通过 props 设置初始值,之后无法改变。| 主要用于展示数据的场景。| | 受控组件 | 状态由外部或父级控制和更新。| 外部可以直接修改输入框中的值,并且这些变化会反映到父级的状态中。| 更适用于处理需要编辑的数据的情况。| 在选择使用受控还是非受控组件时,应根据具体的应用场景来决定:如果数据的变更需要外部干预,则建议采用受控形式;反之,若仅需展示固定不变的信息,则可以考虑使用非受控方式。

全部评论 (0)

还没有任何评论哟~
客服
客服
  • React()
    优质
    本文对React框架中的受控组件和非受控组件进行对比总结,帮助开发者理解两者特性和应用场景。 React 中的受控组件与非受控组件是两种不同的表单处理方式。它们的主要区别在于是否能够由外部控制其值的变化。 一、非受控组件 在 React 中,非受控组件是指那些内部维护状态 state 的组件,而不是通过父级或外部的状态来管理自身数据的输入元素。这意味着一旦设置好初始值(通常使用 props),该值就不能再被修改了。例如,在下面的例子中,`Input` 组件设置了 `defaultValue` 属性作为其初始值: ```jsx ``` 在页面初始化时可以设置输入框的默认内容,但之后试图通过更改 props 来修改这个值是无效的。 二、受控组件 与非受控组件不同的是,受控组件的状态 state 是由外部控制和管理的。这意味着可以通过改变父级状态来直接更新这些元素中的数据。例如,在下面的例子中,我们创建了一个 `InputItem` 组件,并且通过监听输入事件(如 onChange)实时地更新其内部状态: ```jsx export default class InputItem extends React.Component { constructor(props) { super(props); this.state = { value: }; } componentWillReceiveProps(nextProps) { this.setState({ value: nextProps.value }); } _onChange(evt) { this.setState({ value: evt.target.value }); } render() { return ( ); } } ``` 在这里,我们设置了一个初始值,并且通过外部传递的 `value` 属性来修改输入框的内容。 三、对比与选择 | 类型 | 状态维护方式 | 值更新机制 | 使用场景 | | --- | --- | --- | --- | | 非受控组件 | 组件内部管理状态 state | 仅能通过 props 设置初始值,之后无法改变。| 主要用于展示数据的场景。| | 受控组件 | 状态由外部或父级控制和更新。| 外部可以直接修改输入框中的值,并且这些变化会反映到父级的状态中。| 更适用于处理需要编辑的数据的情况。| 在选择使用受控还是非受控组件时,应根据具体的应用场景来决定:如果数据的变更需要外部干预,则建议采用受控形式;反之,若仅需展示固定不变的信息,则可以考虑使用非受控方式。
  • 610H中文电子的国际接标准概
    优质
    本文章概述了610H中文电子组件在国际市场中的接受度和标准化要求,为从业者提供实用指南。 610H 中文电子组件的可接受性国际验收标准。
  • React-WebSocket:便的 WebSocket 通信React
    优质
    React-WebSocket是一款专门为React应用设计的轻量级库,它简化了通过WebSocket进行实时双向通信的过程,使开发者能够轻松集成和管理WebSocket连接。 React websocket 是一个易于使用的 React 组件,用于 WebSocket 通信。关于招工广告的事情进展得很慢,因为我目前还有很多其他事情要处理,所以如果我没有及时回答你的问题或者 PR 审核时间较长,请不要生气。 任何有兴趣帮助该项目更快发展的人都可以通过提交或审查 Pull Request 并参与讨论来提供支持。 安装方法: ``` npm install --save react-websocket ``` 用法示例: ```javascript import React from react; import Websocket from react-websocket; class ProductDetail extends React.Component { constructor(props) { super(props); } ```
  • 可调整大React - React-ResizableBox
    优质
    React-ResizableBox 是一个灵活强大的React库,支持用户自定义调整组件尺寸。它为网页应用添加了高度互动性和灵活性。 React-resizable-box 是一个可调整大小的 React 组件。
  • 追捧的Obsidian插
    优质
    这款非常受欢迎的Obsidian插件为用户提供了一系列强大的功能和自定义选项,极大地增强了笔记管理和知识组织的能力。 Obsidian是一款流行的个人知识管理和笔记应用程序,支持多种插件来增强其功能。 Dataview:用于将数据呈现为表格和列表,并允许您通过查询和过滤处理数据。 Daily Notes:帮助在文件名中创建和管理每日笔记,使组织和查找更加容易。 Sliding Panes:允许用户在Obsidian界面中创建可滑动的窗格,以同时查看多个文件。 Advanced Tables:改进了Obsidian中的表格功能,添加更多的操作选项和自定义选择。 Note Refactor:帮助进行笔记重构,将大的笔记分解成更小的部分。 Templater:使用模板自动填充内容并生成新文档。 Mindmap:在Obsidian中增加思维导图的功能,以可视化地组织和连接想法。 Kanban:添加看板功能用于管理任务和项目。 Obsidian Git:集成Git版本控制工具来跟踪笔记库的更改历史记录。 Graph View:显示整个笔记数据库之间的链接关系,并提供图形化的视图界面。
  • React单分页实现
    优质
    本文章介绍了如何使用React框架快速搭建一个简单的分页组件,适用于前端开发人员学习和实践。 一款简单的React组件实现的分页功能。
  • 在Vue应用中使用React:VueReact
    优质
    本文介绍如何在基于Vue.js的应用程序中集成和使用React组件,探讨两种框架协同工作的优势及其实现方法。 虚拟Reactvue-react是Vue.js的一个插件,它允许您像使用Vue组件一样使用React组件。首先需要通过npm安装该插件:`npm install vue-react --save`。如果尚未安装,请确保已经安装了react和react-dom软件包,并且还需要安装babel插件:`npm install react react-dom babel-plugin-transform-react-jsx --save`。 接下来,将以下内容添加到您的`.babelrc`文件中: ```json { plugins: [ transform-react-jsx ] } ``` 使用时,请先导入并安装插件: ```javascript import Vue from vue; // 其他代码... ```
  • React React Slider - React的滑块
    优质
    React React Slider 是一个专门为React框架设计的滑块组件库,提供丰富的配置选项和灵活的功能,帮助开发者轻松构建交互性强、美观大方的滑块功能。 React-slider 是一个用于 React 的滑块组件。
  • React表格
    优质
    React表格组件是一种用于在React应用中创建和操作表格数据的工具,提供灵活的数据展示、编辑及交互功能。 Create React App 是一个引导项目入门的工具。在项目目录中可以运行以下脚本: - `npm start`:启动开发模式下的应用程序。 - 打开浏览器查看应用。 - 编辑文件时,页面将自动重新加载,并且任何错误信息会显示在控制台。 另外还有: - `npm test`:以交互式监视模式启动测试运行器。关于更多详情,请查阅相关文档。 - `npm run build`:构建生产环境下的应用程序至build目录下。此命令会在生产环境下正确打包React,优化性能,并将生成的代码最小化及文件名加上哈希值。 您的应用已准备好部署!如需了解更多详细信息,请参考相关文档。 还有一点要注意: - `npm run eject` 注意这是单向操作:一旦使用了`eject`,就无法再恢复。如果您对构建工具和配置的选择不满意,可以随时选择此命令来删除项目中的生成依赖项,并将所有配置文件及传递的依赖项全部列出。 这会把所有的设置暴露出来供您修改。
  • 从HTML到React:转换HTML页面至React
    优质
    本教程介绍如何将传统的HTML静态网页转换为动态且交互性强的React组件,适合前端开发入门者学习。 将HTML中的带注释部分提取为单独的React模块可以简化开发流程。通过导入子组件并用它们替换相应的HTML片段,您可以保持原有的结构,并准备渲染整个组件树。 这个工具旨在帮助React开发者避免手动将HTML转换成React组件这一繁琐的任务。设想一下:你刚从设计师那里得到了一堆HTML文件,接下来的第一步就是把这些静态的代码变成动态可交互的React组件——这是一项既枯燥又耗时的工作。有了自动化工具的帮助,这一切都将变得轻松愉快。 安装这个实用程序的方式非常简单: ``` $ npm i -g html-to-react-components ``` 使用方法也很直观:只要在HTML元素中添加`data-component`属性,并赋予它一个React组件的名字即可完成转换过程;同时还可以通过指定公共前缀(public:)来定义哪些HTML属性应该作为React的props。 例如: ```html ``` 在使用时会变成这样: ```jsx ``` 并且,相应的组件模块将被创建于components目录下。