首页
学习
活动
专区
圈层
工具
发布

在 React 16 中从 setState 返回 null 的妙用

概述 在 React 16 中为了防止不必要的 DOM 更新,允许你决定是否让 .setState 更来新状态。在调用 .setState 时返回 null 将不再触发更新。...React 16 对状态性能进行了改进,如果新的状态值与其现有值相同的话,通过在 setState 中返回 null 来防止来触发更新。 ?...解决方案 以下是我们将要遵循的步骤,来防止不必要的重新渲染: 检查新的状态值是否与现有值相同 如果值相同,我们将返回 null 返回 null 将不会更新状态和触发组件重新渲染 首先,在 app 组件的...没有从 setState 返回 null ? 从 setState 返回 null 之后 注意:我在这里换了一个深色主题,以便更容易观察到 React DOM 中的更新。...总结 本文介绍了在 React 16 中怎样从 setState 返回 null。我在下面的 CodeSandbox 中添加了 mocktail 选择程序的完整代码,供你使用和 fork。

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

    React--10: 组件的三大核心属性3:refs与事件处理

    过时 API:String 类型的 Refs: 如果你之前使用过 React,你可能了解过之前的 API 中的 string 类型的 ref 属性,例如 "textInput"。...回调形似的ref ref 中写回调函数,传入的参数是什么呢?我们打印看一下。...关于回调 refs 的说明 如果 ref 回调函数是以内联函数的方式定义的,在更新过程中它会被执行两次,第一次传入参数 null,然后第二次会传入参数 DOM 元素。...CreateRef 使用 createRef API React.createRef调用后可以返回一个容器,该容器可以存储被ref标识的节点。...但是只能存放一个 class Demo extends React.Component{ // React.createRef调用后可以返回一个容器,该容器可以存储被ref标识的节点 myRef

    1.4K30

    Reactjs 入门基础(三)

    我们可以在父组件中设置 state, 并通过在子组件上使用 props 将其传递到子组件上。 在 render 函数中, 我们设置 name 和 site 来获取父组件传递过来的数据。...该函数会在组件render()方法调用后调用。 forceUpdate()方法会使组件调用自身的render()方法重新渲染组件,组件的子组件也会调用自己的render()。...获取DOM节点:getDOMNode DOMElement getDOMNode() 返回值:DOM元素DOMElement 如果组件已经挂载到DOM中,该方法返回对应的本地浏览器 DOM 元素。...当render返回null 或 false时,this.getDOMNode()也会返回null。 从DOM 中读取值的时候,该方法很有用,如:获取表单字段的值和做一些 DOM 操作。...可以使用该方法保证了setState()和forceUpdate()在异步场景下的调用不会出错。

    3.5K90

    并行设计模式--Future、Callback、Promise

    把耗时操作放到异步线程中执行,然后再获取结果时判断是否执行完,执行完则直接返回结果,没执行完则阻塞等到返回,这是future模式的一般做法,目的是充分利用等待时间 JDK Future模式的使用 以JDK...= callable; this.state = NEW; // ensure visibility of callable } // 即使提交的是runnable也会适配成对应的callable...因为在值算出来时自动调用后续处理因此不存在阻塞操作。...但是在业务后续操作很多时,其存在一个嵌套的问题,俗称回调地狱,这一点在JS中经常遇到: 清单7:Callback带来的回调地狱写法 api.getItem(1) .then(item => {...item.amount++; api.updateItem(1, item) .then(update => { api.deleteItem(1)

    5.1K60

    Vuex 2.0 源码分析

    我们有必要知道 mutation 的回调函数的调用时机,在 Vuex 中,mutation 的调用是通过 store 实例的 API 接口 commit 来调用的,来看一下 commit 函数的定义:...我们有必要知道 action 的回调函数的调用时机,在 Vuex 中,action 的调用是通过 store 实例的 API 接口 dispatch 来调用的,来看一下 dispatch 函数的定义:...我们有必要知道 getter 的回调函数的调用时机,在 Vuex 中,我们知道当我们在组件中通过 this....� watch(getter, cb, options) watch 作用是响应式的监测一个 getter 方法的返回值,当值改变时调用回调。..._withCommit 方法修改 Store 的 rootState,之所以提供这个 API 是由于在我们是不能在 muations 的回调函数外部去改变 state。

    2.3K30

    React生命周期简单分析

    比componentDidMount请求早,具体应该是componentWillMount会立即执行,执行完之后会立即进行render 在componentDidMount 被调用后,componentWillUnmount...如果触发某些回调函数时需要用到 DOM 元素的状态,则将对比或计算的过程迁移至 getSnapshotBeforeUpdate,然后在 componentDidUpdate 中统一触发回调或更新状态....而且这个方法会返回值....当需要更新状态时,需要返回一个 object ,如果不需要任何更新,则返回null即可. 2.1.3 如果由于父组件的原因导致该组件重新渲染,这个方法也会被调用, 如果只想要处理更新的话,最好加上判断条件...正式版的context API 1 context这个特性已经存在很久了,但因为一些原因一直是处于试验性质的API.

    1.6K10

    面试官:react中的setState是同步的还是异步的

    == null) { const existingCallbackPriority = root.callbackPriority; //新的setState的回调和之前setState...newCallbackNode = scheduleCallback( schedulerPriorityLevel, performConcurrentWorkOnRoot.bind(null..., root), ); //... } ​ 那为什么在Concurrent mode下,在setTimeout回调多次setState优先级一致呢,因为在获取Lane的函数requestUpdateLane...//在setTimeout中schedulerLanePriority, currentEventWipLanes都相同,所以返回的lane也相同 lane = findUpdateLane(schedulerLanePriority...concurrent模式下:都是异步的 视频讲解(高效学习):点击学习 往期react源码解析文章: 1.开篇介绍和面试题 2.react的设计理念 3.react源码架构 4.源码目录结构和调试 5.jsx&核心api

    1.3K20

    深入理解 Promise 之手把手教你写一版

    语法上:Promise 是一个构造函数,返回一个带有状态的对象 功能上:Promise 用于解决异步函数并根据结果做出不同的应对 规范上:Promise 是一个拥有 then 方法的对象(在 JS 里函数也是对象...其中第三条即为 then 方法中配置的回调函数,这里先不做多讨论,先看前两条,只需要两行代码即可: this.state = state this.value = value / this.reason...= PENDING // prpmise具有初始状态 this.value = null// 用于保存终值 this.reason = null// 用于保存拒因 this.onFulfilledCallbacks...最后只剩下一个 resolvePromise 方法,先介绍一下它的功能:根据回调函数的返回值 x 决定 promise2 的最终状态: 如果 x 为 thenable 对象,即带 then 方法的对象...= PENDING this.value = null this.reason = null this.onFulfilledCallbacks = [] this.onRejectedCallbacks

    73210

    2021前端面试必备题+答案

    首先我们需要知道: DOM 引擎、JS 引擎 相互独立,但又工作在同一线程(主线程) JS 代码调用 DOM API 必须 挂起 JS 引擎、转换传入参数数据、激活 DOM 引擎,DOM 重绘后再转换可能有的返回值...3、then方法返回一个新的Promise实例,并接收两个参数onResolved(fulfilled状态的回调);onRejected(rejected状态的回调,该参数可选) 4、catch方法返回一个新的...9、Promise.reject()同样返回一个新的Promise对象,状态为rejected,无论传入任何参数都将作为reject()的参数 2)Promise优点 ①统一异步 API Promise...的一个重要优点是它将逐渐被用作浏览器的异步 API ,统一现在各种各样的 API ,以及不兼容的模式和手法。...在结果计算出来之前或之后注册回调函数都是可以的,都可以拿到正确的值。 Promise 的这个优点很自然。但是,不能使用 Promise 处理多次触发的事件。

    1K30
    领券