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

PureComponent中的受控输入在更改时不呈现

PureComponent是React中的一个优化性能的组件,它是React.Component的一个变体。PureComponent通过浅比较来决定是否重新渲染组件,从而避免不必要的渲染,提高应用的性能。

受控输入是指表单元素的值由React组件的state来控制,并通过onChange事件来更新state的值。当受控输入的值发生变化时,React会重新渲染组件,并将新的值传递给受控输入。

在PureComponent中使用受控输入时,如果每次输入变化都会导致组件重新渲染,可能会降低性能。这是因为PureComponent使用浅比较来判断是否重新渲染组件,而受控输入的值每次变化都会生成一个新的对象。即使新的对象与之前的对象内容相同,但它们的引用不同,浅比较会认为它们是不同的,从而触发重新渲染。

为了解决这个问题,可以使用shouldComponentUpdate方法来手动比较受控输入的值,只有在值发生变化时才返回true,从而避免不必要的重新渲染。示例代码如下:

代码语言:txt
复制
class MyComponent extends React.PureComponent {
  constructor(props) {
    super(props);
    this.state = {
      inputValue: ''
    };
  }

  handleChange = (event) => {
    this.setState({ inputValue: event.target.value });
  }

  shouldComponentUpdate(nextProps, nextState) {
    return this.state.inputValue !== nextState.inputValue;
  }

  render() {
    return (
      <input
        type="text"
        value={this.state.inputValue}
        onChange={this.handleChange}
      />
    );
  }
}

在上述代码中,通过重写shouldComponentUpdate方法,只有当inputValue发生变化时才重新渲染组件。

对于受控输入的应用场景,可以用于实时搜索、表单验证等需要实时更新输入值的场景。

腾讯云提供了一系列与云计算相关的产品,例如云服务器、云数据库、云存储等。具体可以参考腾讯云官方文档:腾讯云产品

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

React-组件-Transition回调函数和React-组件-受控组件

前言React 官方文档:https://reactcommunity.org/react-transition-group/transition本文主要介绍就是 Transition 之前三种状态会自动触发对应回调函数...,以后需求当中可能会有指定回调函数当中进行编写对应业务代码,所以这里只是样式一下它执行时机。...e.target.value); this.setState({ name: e.target.value }); }}export default App;图片受控组件处理技巧我们有多个受控组件时候...,这个时候有可能需要编写多个受控组件处理方法,如果给每一个受控组件绑定一个对应名称,我们就可以抽离出来一个公共处理方法处理即可。...,如果本篇文章对你有所帮助,或者你有什么疑问,欢迎评论区留言,我一般看到都会回复

20120
  • 从componentWillReceiveProps说起

    更新流程shouldComponentUpdate之前调用。...state,其返回值会被merge到当前state componentWillReceiveProps:该生命周期函数里setState 实际应用两种常见场景容易出问题(被称为anti-pattern...this.setState({ email: nextProps.email }); } } 上例,用户input控件输入一串字符(相当于手动更新state),如果此时父组件更新引发该组件rerender...“受控”与“不受控” 组件分为受控组件与不受控组件,同样,数据也可以这样理解 受控组件与不受控组件 针对表单输入控件(、、等)提出概念,语义上区别在于受控组件表单数据由...用户与不受控组件交互不受React组件控制,输入会立即反馈到UI。

    2.4K20

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

    useCalLback 返回一个回忆memoized版本,该版本仅在其中一个输入发生更改时才会更改。...新 UNSAFE_前缀将有助于代码 review 和 debug 期间,使这些有问题字样突出废弃 javascrip:形式 URL。...这种组件React中被称为受控组件,受控组件,组件渲染出状态与它value或checked属性相对应,react通过这种方式消除了组件局部状态,使整个状态可控。...因为非受控组件将真实数据储存在 DOM 节点中,所以使用非受控组件时,有时候反而容易同时集成 React 和非 React 代码。...DOM如果是现用现取称为非受控组件,而通过setState将输入值维护到了state,需要时再从state取出,这里数据就受到了state控制,称为受控组件。

    1.2K20

    从 0 到 1 实现 React 系列 —— 5.PureComponent 实现 && HOC 探幽

    本系列文章实现一个 cpreact 同时帮助大家理顺 React 框架核心内容(JSX/虚拟DOM/组件/生命周期/diff算法/setState/PureComponent/HOC/...)...这里有个坑点,当我们输入输入字符时候,并不会立马触发 onChange 事件(我们想要让事件立即触发,然而现在要按下回车键或者点下鼠标才触发), react 中有个合成事件 知识点,下篇文章会进行探究...顺带一提在这个 demo 似乎看到了双向绑定效果,但是实际 React 并没有双向绑定概念,但是我们可以运用 HOC 知识点结合 setState React 表单实现伪双向绑定效果。...然后 render 调用 super.render() 来调用父类 render 方法。... 《ES6 继承与 ES5 继承差异》我们提到了作为对象使用 super 指向父类实例。

    73510

    40道ReactJS 面试问题及答案

    因此,ParentComponent inputRef 现在指向 ChildComponent 呈现输入元素,从而使父组件能够单击按钮时强制聚焦于输入。 17. 什么是反应纤维?...React 中有两种处理表单主要方法,它们基本层面上有所不同:数据管理方式。 非受控组件:受控组件,表单数据由 DOM 本身处理,React 不通过状态控制输入值。...受控组件:表单数据由 React 组件(而不是 DOM)处理,方法是将输入值存储状态,并在输入改时更新状态。 输入值由 React 状态控制,输入更改通过事件处理程序进行处理,从而更新状态。...它们 React 16.8 引入,是为了解决功能组件状态管理和副作用问题,允许开发人员编写类情况下使用状态和其他 React 功能。...您可以通过使用 JSX autoFocus 属性或通过以编程方式将输入元素集中功能组件 useEffect 挂钩或类组件 componentDidMount 生命周期方法,将输入元素集中页面加载上

    38810

    Web 性能优化: 使用 React.memo() 提高 React 组件性能

    浏览器运行我们程序,并多次单击 Click Me 按钮,会看到控制打印很多次信息: 我们控制台中有 “componentWillUpdate” 和 “componentWillUpdate”...日志,这表明即使状态相同,我们组件也重新呈现,这称为浪费渲染。...DevTools 选项卡操作 TestC 组件状态,单击 React 选项,选择右侧 TestC,我们将看到带有值计数状态: 在这里,我们可以改变数值,点击count文本,输入 2,然后回车:...当然,函数组件,我们不能使用 extend React.PureComponent 来优化我们代码 让我们将 TestC 类组件转换为函数组件。...如果我们更改数字并按回车,组件 props 将更改为我们文本框输入值,接着继续更为 45: 移动到 Console 选项 我们看到 TestC 组件重新渲染,因为上个值为 5,当前值为 45.现在

    5.6K41

    优化 React APP 10 种方法

    它不应在第二个输入再次运行,因为它与前一个输入相同,它应将结果存储某个位置,然后运行函数(expFunc)情况下将其返回。 在这里,我们将使用useMemo挂钩为我们优化expFunc。...React.PureComponent通过减少浪费渲染次数来优化我们组件。 4.缓存功能 可以render方法React组件JSX调用函数。...参见,ReactCompo。cheapableFuncJSX呈现,对于每次重新呈现,都会调用该函数,并将返回值呈现在DOM上。...这是因为React.memo会记住其道具,并会在执行My组件情况下返回缓存输出,只要相同输入一遍又一遍。...它在状态对象具有数据。如果我们输入文本框输入一个值并按下Click Me按钮,则将呈现输入值。

    33.9K20

    React面试八股文(第一期)

    构造函数,我们一般会做两件事:初始化 state对自定义方法进行 this 绑定getDerivedStateFromProps是一个静态函数,所以不能在这里使用 this,也表明了 React 官方希望调用方滥用这个生命周期函数...(1)受控组件 使用表单来收集用户输入时,例如等元素都要绑定一个change事件,当表单状态发生变化,就会触发onChange事件,更新组件state...这种组件React中被称为受控组件,受控组件,组件渲染出状态与它value或checked属性相对应,react通过这种方式消除了组件局部状态,使整个状态可控。...因为非受控组件将真实数据储存在 DOM 节点中,所以使用非受控组件时,有时候反而容易同时集成 React 和非 React 代码。...DOM如果是现用现取称为非受控组件,而通过setState将输入值维护到了state,需要时再从state取出,这里数据就受到了state控制,称为受控组件。

    3.1K30

    通过防止不必要重新渲染来优化 React 性能

    我们示例阻止渲染非常简单。 但在实践,这更加困难,因为无意道具更改很容易潜入。...让我们 Counter 组件包含增量按钮。...可能情况下,为每个列表项分配一个唯一 ID——通常你会从后端数据库得到这个。 Keys should also be stable....如果周围 DOM 结构发生变化,子组件将被重新挂载。例如,这个应用程序列表周围添加了一个容器。 现实应用程序,您可能会根据设置将项目放在不同。...可能情况下,保持 DOM 结构相同。 例如,如果您需要在列表组之间显示分隔符,请在列表元素之间插入分隔符,而不是为每个组添加包装 div。

    6.1K41

    React 开发必须知道 34 个技巧【近1W字】

    前言 React 是前端三大框架之一,面试和开发也是一项技能; 本文从实际开发总结了 React 开发一些技巧技巧,适合 React 初学或者有一定项目经验同学; 万字长文,建议收藏。...使用了Provider和Customer模式,顶层Provider传入value,子孙级Consumer获取该值,并且能够传递函数,用来修改context 声明一个全局 context 定义...3.React.PureComponent是作用在类,而React.memo是作用在函数。...分开; 2.V4是集中式 router,通过 Route 嵌套,实现 Layout 和 page 嵌套,Layout 和 page 组件 是作为 router 一部分 3.V3 routing...规则是 exclusive,意思就是最终只获取一个 route 4.V4 routes 默认是 inclusive ,这就意味着多个 可以同时匹配和呈现.如果只想匹配一个路由,可以使用

    3.5K00

    React性能优化8种方式了解一下

    Memoization是一种优化技术,主要通过存储昂贵函数调用结果,并在再次发生相同输入时返回缓存结果,以此来加速程序。...总体目标是减少JavaScript呈现组件期间必须执行工作量,以便主线程被阻塞时间更短。...需要注意是在对于那些可以忽略渲染时间组件或者是状态一直变化组件则要谨慎使用PureComponent,因为进行浅比较也会花费时间,前端培训这种优化适用于大型展示组件上。...当然,有时内联匿名函数是最简单方法,实际上并不会导致应用程序出现性能问题。这可能是因为一个非常“轻量级”组件上使用它,或者因为父组件实际上必须在每次props更改时重新渲染其所有内容。...,例如下面的元素,但是react规定组件必须有一个父元素。

    1.5K40

    React Hooks - 缓存记忆

    如果您函数组件相同Props属性下呈现相同结果,React将会使用缓存,跳过这次渲染,并重用最后一次渲染结果。 默认情况下,它将仅对props对象复杂对象进行浅层比较。...,并且仅当这些输入参数更改时,useCallback才会返回新值。...在此示例,每次count更改时,useCallback将返回新引用。由于计数每次渲染期间都会更改,因此useCallback将在每个渲染期间返回新值。所以此代码也不会缓存记忆。...由于保证了dispatch渲染之间具有相同引用,因此不需要useCallback,这使代码容易减少了与缓存记忆相关错误。...使用useReducer常见模式是与useContext一起使用,以避免大型组件树显式传递回调。

    3.6K10

    React Native列表之FlatList开发实用教程

    APP开发过程,列表可谓是页面最重要一种展现形式了,几乎每一个APP都离不了列表,那么在这篇文章中将向大家分享React Native该如何实现列表,以及FlatList原理和实用指南。...请确保你在行组件以外地方保留了数据。 本组件继承自PureComponent而非通常Component,这意味着如果其props浅比较是相等,则不会重新渲染。...如果你某些场景碰到内容渲染情况(比如使用LayoutAnimation时),尝试设置removeClippedSubviews={false}。我们可能会在将来版本修改此属性默认值。...同时此数据改时也需要先修改其引用地址(比如先复制到一个新Object或者数组),然后再修改其值,否则界面很可能不会刷新。 getItem?...如果指定此属性,则FlatList不会触发更新,因为它是一个PureComponent,其props===比较没有变化则不会触发更新。

    6.5K00

    React 中非受控受控组件

    React 中非受控受控组件 两者都是呈现 HTML 表单元素 React 组件。这意味着,每当您创建具有 HTML 表单组件时,您都会创建两个组件任何一个。...受控组件 HTML ,表单元素(如、 和 )通常自己维护 state,并根据用户输入进行更新。...然而当有多个输入框,或者多个这种组件时,如果想同时获取到全部值就必须每个都要编写事件处理函数,这会让代码看着很臃肿,所以为了解决这种情况,出现了非受控组件。 这个时候我们推荐使用非受控组件。...非受控组件 不受控组件是呈现表单元素并在 DOM 本身更新其值组件。可以使用 ref 而不是为每个状态更新编写事件处理程序,以便从 DOM 访问表单值。...集成具有不受控制组件 React 和非 React 代码容易,因为不受控组件 DOM 维护其事实来源。如果您希望代码数量快速而粗糙,则代码数量也会略有减少。

    2.3K20

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

    callback 而不是一个对象 6、(构造函数)调用 super(props) 目的是什么 7、React事件处理 8、React如何创建refs 9、什么是JSX 10、为什么直接更新state...(1)受控组件 使用表单来收集用户输入时,例如等元素都要绑定一个change事件,当表单状态发生变化,就会触发onChange事件,更新组件state。...这种组件React中被称为受控组件,受控组件,组件渲染出状态与它value或checked属性相对应,react通过这种方式消除了组件局部状态,使整个状态可控。...(2)非受控组件 如果一个表单组件没有value props(单选和复选按钮对应是checked props)时,就可以称为非受控组件。受控组件,可以使用一个ref来从DOM获得表单值。...React组件生命周期分为三个不同阶段: 初始呈现阶段:这是组件即将开始其生命旅程并到达DOM阶段。 更新阶段:一旦将组件添加到DOM,它可能只发生道具或状态更改时才更新和重新呈现

    7.6K10

    React 开发要知道 34 个技巧

    使用了Provider和Customer模式,顶层Provider传入value,子孙级Consumer获取该值,并且能够传递函数,用来修改context 声明一个全局 context 定义...刷新才会加载出来 5.优缺点 1.paramsHashRouter和BrowserRouter路由中刷新页面参数都不会丢失 2.stateBrowserRouter刷新页面参数不会丢失,HashRouter...3.React.PureComponent是作用在类,而React.memo是作用在函数。...router,通过 Route 嵌套,实现 Layout 和 page 嵌套,Layout 和 page 组件 是作为 router 一部分; 3.V3 routing 规则是 exclusive...,意思就是最终只获取一个 route; 4.V4 routes 默认是 inclusive ,这就意味着多个; 可以同时匹配和呈现.如果只想匹配一个路由,可以使用Switch, 只有一个 会被渲染

    1.5K31

    React 进阶 - 渲染控制

    对象上,只要组件销毁,缓存值就一直存在,但是依赖项发生变化时,会重新执行 create 函数,重新计算缓存值 应用 可以缓存 element 对象,从而达到按条件渲染组件,优化性能作用 如果组件不期望每次...function 组件开发项目的时候,如果父组件是函数,子组件是 PureComponent ,那么绑定函数要小心,因为函数组件每一次执行,如果处理,还会声明一个新函数,所以 PureComponent...参数 Component 原始组件本身 compare 是一个函数,可以根据一次更新 props 是否相同决定原始组件是否重新渲染 特点 React.memo: 第二个参数 返回 true 组件渲染...forceUpdate 而不是 setState ,会跳过 PureComponent 浅比较和 shouldComponentUpdate 自定义比较 原理是组件调用 forceUpdate 时候...,无须过分在乎 React 没有必要渲染,要理解执行 render 不等于真正浏览器渲染视图,render 阶段执行是 js 当中,js 运行代码远快于浏览器 Rendering 和 Painting

    85310

    浅谈 React 生命周期

    如果你想「 prop 更改时“重置”某些 state」,请考虑使组件完全受控或使用 key 使组件完全不受控 代替。 此方法无权访问组件实例。...PureComponent 会对 props 和 state 进行浅层比较,并减少了跳过必要更新可能性。...请注意,返回 false 并不会阻止子组件 state 更改时重新渲染。 建议 shouldComponentUpdate() 中进行深层比较或使用 JSON.stringify()。...在此方法执行必要清理操作,例如,清除 timer,取消网络请求或清除 componentDidMount() 创建订阅等。...如果你使用 componentWillReceiveProps 是为了「 prop 更改时“重置”某些 state」,请考虑使组件完全受控或使用 key 使组件完全不受控 代替。

    2.3K20
    领券