首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你用受控模式写组件?图啥呢?

前端开发经常会涉及表单的处理,或者其他一些用于输入的组件,比如日历组件。 涉及到输入,就绕不开受控模式和非受控模式的概念。 什么是受控,什么是非受控呢?...除了原生表单元素外,组件也需要考虑受控和非受控的情况。 比如日历组件: 它的参数就要考虑是支持非受控模式的 defaultValue,还是用受控模式的 value + onChange。...如果这是一个业务组件,那基本就是用非受控模式的 defaultValue 了,调用方只要拿到用户的输入就行。 用受控模式的 value 还要 setValue 触发额外的渲染。...这样,我们的组件就同时支持了受控模式和非受控模式。...受控模式是代码来控制 value,用户输入之后通过 onChange 拿到值然后 setValue,触发重新渲染。 单独用的组件,绝大多数情况下,用非受控模式就好了,因为你只是想获取到用户的输入。

16410

美团前端一面必会react面试题4

state 是多变的、可以修改,每次setState都异步更新的。React中什么是受控组件和非控组件?...(2)非受控组件 如果一个表单组件没有value props(单选和复选按钮对应的是checked props)时,就可以称为非受控组件。在非受控组件中,可以使用一个ref来从DOM获得表单值。...因为非受控组件将真实数据储存在 DOM 节点中,所以在使用非受控组件时,有时候反而更容易同时集成 React 和非 React 代码。...如果你不介意代码美观性,并且希望快速编写代码,使用非受控组件往往可以减少你的代码量。否则,你应该使用受控组件。...DOM如果是现用现取的称为非受控组件,而通过setState将输入的值维护到了state中,需要时再从state中取出,这里的数据就受到了state的控制,称为受控组件。

3K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    React教程:组件,Hooks和性能

    React 中的受控组件与非受控组件 在大多数应用中,需要输入和与用户进行某种形式的交互,允许他们输入内容、上传文件、选择字段等。...React 用两种不同的方式处理用户交互 —— 受控和非受控组件。 顾名思义,受控组件的值由 React 控制,能为与用户交互的元素提供值,而不受控制的元素不获取值属性。...return ( 10 11 ); 12 } 13} 14 在 React 的非受控组件中...在大数情况下用受控组件是可行的,不过也有一些例外。例如使用非受控制组件的一种情况是 file 类型输入,因为它的值是只读的,不能在编码中去设置(需要用户交互)。另外我发现受控组件更容易理解和于使用。...对受控组件的验证是基于重新渲染的,状态可以更改,并且可以很轻松的显示输入中存在的问题(例如格式错误或者输入为空)。

    2.6K30

    我的react面试题笔记整理(附答案)

    何时使用 refs 的好的示例有管理焦点/文本选择,触发命令动画,或者和第三方 DOM 库集成。你应该避免使用 String 类型的 Refs 和内联的 ref 回调。...(2)非受控组件 如果一个表单组件没有value props(单选和复选按钮对应的是checked props)时,就可以称为非受控组件。在非受控组件中,可以使用一个ref来从DOM获得表单值。...因为非受控组件将真实数据储存在 DOM 节点中,所以在使用非受控组件时,有时候反而更容易同时集成 React 和非 React 代码。...如果你不介意代码美观性,并且希望快速编写代码,使用非受控组件往往可以减少你的代码量。否则,你应该使用受控组件。...DOM如果是现用现取的称为非受控组件,而通过setState将输入的值维护到了state中,需要时再从state中取出,这里的数据就受到了state的控制,称为受控组件。

    1.2K20

    百度前端高频react面试题(持续更新中)_2023-02-27

    什么是受控组件和非受控组件 受状态控制的组件,必须要有onChange方法,否则不能使用 受控组件可以赋予默认值(官方推荐使用 受控组件) 实现双向数据绑定 class Input extends Component...(2)非受控组件 如果一个表单组件没有value props(单选和复选按钮对应的是checked props)时,就可以称为非受控组件。在非受控组件中,可以使用一个ref来从DOM获得表单值。...因为非受控组件将真实数据储存在 DOM 节点中,所以在使用非受控组件时,有时候反而更容易同时集成 React 和非 React 代码。...如果你不介意代码美观性,并且希望快速编写代码,使用非受控组件往往可以减少你的代码量。否则,你应该使用受控组件。...DOM如果是现用现取的称为非受控组件,而通过setState将输入的值维护到了state中,需要时再从state中取出,这里的数据就受到了state的控制,称为受控组件。

    2.3K30

    【愚公系列】2023年03月 其他-Web前端基础面试题(react专项_35道)

    23、React的严格模式如何使用,有什么用处? 24、React中什么是受控组件和非控组件? 25、React和vue.js的相似性和差异性是什么? 26、React组件生命周期的不同阶段是什么?...与 Fragment 一样,StrictMode 不会渲染任何可见的 UI。它为其后代元素触发额外的检查和警告。 24、React中什么是受控组件和非控组件?...(1)受控组件 在使用表单来收集用户输入时,例如等元素都要绑定一个change事件,当表单的状态发生变化,就会触发onChange事件,更新组件的state。...,这会让代码看着很臃肿,所以为了解决这种情况,出现了非受控组件。...(2)非受控组件 如果一个表单组件没有value props(单选和复选按钮对应的是checked props)时,就可以称为非受控组件。在非受控组件中,可以使用一个ref来从DOM获得表单值。

    7.6K10

    antd mobile 作者教你写 React 受控组件和非受控组件

    在这篇文章,我们将一起聊聊怎么去让一个组件像 antd 的 Input 组件这样,既支持受控模式,又支持非受控模式。...而如果我们稍微对它做一点调整,把原本的内部状态 value 去掉,放到 props 上去,它就变成了受控组件: 很显然,此时输入框的值是取决于外部传递进来的 props。...如果我们画个图,那可以很清楚的看到受控和非受控的区别: 图中蓝色的方框表示组件,黄色的圆圈表示组件内的状态。 既受控组件又非受控?...尽管在业务项目中,我们写的组件都是明确的受控或者非受控,但对于组件库来说,有非常多的组件需要做到既支持受控模式,又支持非受控模式。...以 antd-mobile 现在的 5.17 版本为例,几乎全部的涉及到输入值、切换、展开收起的组件,都是需要做到既受控又非受控的。

    2K10

    我们应该如何优雅的处理 React 中受控与非受控

    非受控 既然存在受控组件,那么一定存在相反非受控的概念。 在大多数情况下,我们推荐使用 受控组件 来处理表单数据。在一个受控组件中,表单数据是由 React 组件来管理的。...另一种替代方案是使用非受控组件,这时表单数据将交由 DOM 节点来处理。 熟悉 Ant-Design 等存在表单校验的 React 组件库的朋友,可以稍微回忆下它们的表单使用。...之后当用户在页面上的 input 元素中输入任何值表单值都会跟随用户输入而实时变化而并不受任何组件状态的控制,这就被称为非受控组件。...相信大家在搞清楚受控 & 非受控的概念后这些对于大家来说都是小菜一碟。 当然在绝大多数社区组件库中都是将 undefined 作为了区分受控和非受控的标志。...只需要传入 defaultValue 的值就可以使用非受控状态的 input 。 受控处理 上述我们用非常简单的代码实现了非受控的 Input 输入框,此时我们再来看看如何兼顾受控状态的值。

    6.6K10

    滴滴前端二面react面试题总结

    (2)非受控组件 如果一个表单组件没有value props(单选和复选按钮对应的是checked props)时,就可以称为非受控组件。在非受控组件中,可以使用一个ref来从DOM获得表单值。...因为非受控组件将真实数据储存在 DOM 节点中,所以在使用非受控组件时,有时候反而更容易同时集成 React 和非 React 代码。...如果你不介意代码美观性,并且希望快速编写代码,使用非受控组件往往可以减少你的代码量。否则,你应该使用受控组件。...DOM如果是现用现取的称为非受控组件,而通过setState将输入的值维护到了state中,需要时再从state中取出,这里的数据就受到了state的控制,称为受控组件。...如果是文本,那就要 document.createTextNode 来创建。所以说根据 vdom 类型的不同,写个 if else,分别做不同的处理就行了。

    1.1K40

    我的react面试题整理2(附答案)

    (2)非受控组件 如果一个表单组件没有value props(单选和复选按钮对应的是checked props)时,就可以称为非受控组件。在非受控组件中,可以使用一个ref来从DOM获得表单值。...因为非受控组件将真实数据储存在 DOM 节点中,所以在使用非受控组件时,有时候反而更容易同时集成 React 和非 React 代码。...如果你不介意代码美观性,并且希望快速编写代码,使用非受控组件往往可以减少你的代码量。否则,你应该使用受控组件。...DOM如果是现用现取的称为非受控组件,而通过setState将输入的值维护到了state中,需要时再从state中取出,这里的数据就受到了state的控制,称为受控组件。...何时使用 refs 的好的示例有管理焦点/文本选择,触发命令动画,或者和第三方 DOM 库集成。你应该避免使用 String 类型的 Refs 和内联的 ref 回调。

    4.4K20

    React 设计模式 0x1:组件

    函数组件是普通的 JavaScript 函数,它接收 props 作为输入并返回一个 React 组件。...以下是保持良好的 React 组件结构的最佳方法: 避免使用大型组件 大型组件通常很难阅读、理解和调试 即使应用程序正常运行,当出现问题时,如何调试也将是个问题 应该将大型组件分解为较小的组件,以便于阅读...,以便于理解应该将哪些文件放入特定文件夹中 将可重用的逻辑移至单独的类或函数中 通常在编程中,始终记住 DRY 原则 无论您觉得应用程序或组件将使用哪些可重用的逻辑,都将其移至函数或方法中,并在应用程序中调用...vs 非受控组件 受控组件数据是由 React 组件管理的,而非受控组件数据是由 浏览器或 DOM 处理。...受控组件通常由用户输入或事件处理。

    88610

    React 中非受控和受控的组件

    该组件将返回带有事件的输入字段,该事件正在记录输入字段值,并使用该方法将名称设置为新的输入值。 对于受控组件来说,输入的值始终由 React 的 state 驱动。...然而当有多个输入框,或者多个这种组件时,如果想同时获取到全部的值就必须每个都要编写事件处理函数,这会让代码看着很臃肿,所以为了解决这种情况,出现了非受控组件。 这个时候我们更推荐使用非受控组件。...集成具有不受控制组件的 React 和非 React 代码更容易,因为不受控制的组件在 DOM 中维护其事实来源。如果您希望代码数量快速而粗糙,则代码数量也会略有减少。... 不受控制组件的限制 无即时字段验证 无法有条件地禁用提交按钮 无法强制执行输入格式 单个数据没有多个输入 无动态输入 小结 总体而言,非受控组件可以在必要时使用或比受控组件更有效...若要使用非受控制的组件,可以使用 ref 直接访问 DOM 值。对于受控组件,我们将表单数据值存储在 React 组件的状态属性中。

    2.4K20

    组件设计 —— 重新认识受控与非受控组件

    重新定义受控与非受控组件的边界 React 官网中对非受控组件与受控组件作了如图中下划线的边界定义。...一经推敲, 该定义是缺乏了些完整性和严谨性的, 比如针对非表单组件(弹框、轮播图)如何划分受控与非受控的边界? 又比如非受控组件是否真的如文案上所说的数据的展示与变更都由 dom 自身接管呢?..., 概括如下: 受控以及非受控组件的边界划分取决于当前组件对于子组件值的变更是否拥有控制权。...如若有则该子组件是当前组件的受控组件; 如若没有则该子组件是当前组件的非受控组件。 职能范围 基于调用方对于受控组件拥有控制权这一认知, 因此受控组件相较非受控组件能赋予调用方更多的定制化职能。...观察 Input 组件的第一行代码, 其将 defaultValue 赋值给 value, 这种将 props 赋值给 state 的赋值行为在一定程度上会增加某些隐性 bug 的出现概率。

    80610

    React非受控组件

    在React中,组件的状态(state)通常由组件自身管理和控制。然而,有时我们也可以使用非受控组件来处理表单元素或其他用户输入,这意味着我们不需要显式地管理和更新组件的状态。...非受控组件React中的非受控组件是指那些其值不由React的状态管理的组件。相反,它们依赖于底层的DOM元素来存储和管理数据。我们可以使用ref来访问和操作非受控组件的值。...该组件包含一个文本输入框和一个提交按钮。我们使用ref来获取文本输入框的引用,并将其存储在this.inputRef中。...注意事项虽然非受控组件提供了一种简单的方式来处理用户输入,但也需要注意以下事项:不受控制:非受控组件的值不受React状态管理,这意味着React无法对其进行验证、更新或重置。...适度使用:非受控组件通常适用于简单的场景,其中输入的状态不需要与其他组件进行交互或同步。对于更复杂的表单逻辑,受控组件可能更合适。

    68320

    校招前端经典react面试题(附答案)

    ,所以,两个非父子组件之间通信就相对麻烦,redux的出现就是为了解决state里面的数据问题Redux设计理念Redux是将整个应用状态存储到一个地方上称为store,里面保存着一个状态树store...createElement 函数是 JSX 编译之后使用的创建 React Element 的函数,而 cloneElement 则是用于复制某个元素并传入新的 Props受控组件、非受控组件受控组件就是改变受控于数据的变化...受控组件更合适,数据驱动是react核心非受控组件不是通过数据控制页面内容ref是一个函数又有什么好处?...根据表单数据的存储位置,将组件分成约東性组件和非约東性组件。...查看结果 ); }}虽然非约東性组件通常更容易实现

    2.1K20

    Vue 选手转 React 常犯的 10 个错误,你犯过几个?

    === props,react就可以确定它内部并没有发生变化 新功能:react正在构建的新功能依赖将状态视为快照,如果你正在更新过去的状态版本,这会导致无法使用新功能 需求变更:一些需要撤销/重做和显示历史记录的值...label} <input id={id} {...delegated} /> ); } 7、非受控到受控的切换...来看一个比较典型的表单场景,将一个输入与一个React状态绑定: import React from 'react'; function App() { const [email, setEmail...我们需要将我们的状态初始化为一个空字符串: const [email, setEmail] = React.useState(''); 当我们设置了 value 属性时,等于就是告诉 React,我们希望这是一个受控的组件...如果你从 useEffect 钩子函数返回任何东西,它必须是一个清理函数,此函数将在组件卸载时运行。相当于类组件中的 componentWillUnmount 生命周期方法。

    23610

    关于React的Key导致的bug总结

    因为需要编辑,这里及把最初的展示组件替换成了input组件,这里并没有使用受控组件,而使用非受控组件,监听blur后再进行数据更新上传至服务器,所以input只设置了defaultvalue值,然后测试...两个不同类型的元素会产生出不同的树; 当根节点为不同类型时,react会直接销毁组件,并重新创建一个新的组件插入树中,且不会再递归它的子节点,一刀切,全部销毁。...如果进行对比时,类型是同一类型,则react不会对组件进行销毁,而且检查需要更新的属性,进行update操作。...这便是我们最开始demo的问题所在,我们使用了index作为key,在删除第一个组件时,第二个组件的key被修改为0,此时因为type相同并且key相同,react默认复用了第一个组件,并没有把第一个组件进行销毁...我们可以把非受控组件改为受控组件,但是在做删除时会引发全量更新。 给每个list添加一个唯一id,这样就完成了我们最基础的功能。

    68400
    领券