ReactJS setState详解

this.state和this.props的更新可能是异步的,React可能会出于性能考虑,将多个setState的调用,合并到一次State的更新中。

this.state的值计算下一个状态。引用官网的一个代码示例:
// Wrong
this.setState({counter: this.state.counter + this.props.increment,
});
如果一定要这么做,可以使用另一个以函数作为参数的setState方法,这个函数的第一个参数是前一个State,第二个参数是当前接收到的最新Props。如下所示:
// Correct
this.setState(function(prevState, props) {return {counter: prevState.counter + props.increment};
});
在调用setState之后,也不能立即使用this.state获取最新状态,因为这时的state很可能还没有被更新,要想保证获取到的state是最新的state,可以在componentDidUpdate中获取this.state。也可以使用带用回调函数参数版本的setStatesetState(stateChange, [callback]),回调函数中的this.state会保证是最新的state。
复制代码
0x00
The SyntheticEventis pooled. This means that the SyntheticEventobject will be reused and all properties will be nullified after the event callback has been invoked. This is for performance reasons. As such, you cannot access the event in an asynchronous way.在 React 事件处理中,事件对象被包装在一个 SyntheticEvent(合成事件)对象中。这些对象是被池化的(pooled),这意味着在事件处理程序会把这些对象重用于其他事件以提高性能。随之而来的问题就是,异步访问事件对象的属性是不可能的,因为事件的属性由于重用而被重置(nullified)。
0x01
下面代码存在问题:
function handleClick(event) {setTimeout(function () {console.log(event.target.name);}, 1000);
}控制台会输出 null,因为每次事件回调完成后,SyntheticEvent 会被重置。
解决方式是把 event 赋值到一个内部变量上。
function handleClick(event) {let name = event.target.name;    // 内部变量保存 event.target.name 的值setTimeout(function () {console.log(name);}, 1000);
}0x02
facebook 官方的实例:
function onClick(event) {console.log(event); // => nullified object.console.log(event.type); // => "click"const eventType = event.type; // => "click"setTimeout(function() {console.log(event.type); // => nullconsole.log(eventType); // => "click"}, 0);// Won't work. this.state.clickEvent will only contain null values.this.setState({clickEvent: event});// You can still export event properties.this.setState({eventType: event.type});
}如果想异步访问事件属性,可以在事件上调用 event.persist(),这会从池中移除合成事件并允许对事件的引用被保留。
复制代码
0x00
React has a setState() problem: Asking newbies to use setState() is a recipe for headaches. Advanced users have secret cures.为了性能和其它原因,setState 这个 API 很容易被误用。
setState 不会立刻改变 React 组件中 state 的值
setState 通过引发一次组件的更新过程来引发重新绘制
多次 setState 函数调用产生的效果会合并0x01
问题
看如下代码:
// state.count 当前为 0
this.setState({count: state.count + 1});
this.setState({count: state.count + 1});
this.setState({count: state.count + 1});
// state.count 现在是 1,而不是 3 
三次操作被合并为了一次。0x02
解决方式
this.setState((prevState, props) => ({count: prevState.count + props.increment
}));要修复它,请使用第二种形式的 setState() 来接受一个函数而不是一个对象。 该函数将接收先前的状态作为第一个参数,将需要更新的值作为第二个参数:
// Correct
this.setState((prevState, props) => ({counter: prevState.counter + props.increment
}));上方代码使用了箭头函数,但它也适用于常规函数:
// Correct
this.setState(function(prevState, props) {return {counter: prevState.counter + props.increment};
});
复制代码
setState(nextState, callback)  
复制代码

这是UI更新最常用的方法,合并新的state到现有的state。

常规方式

nextState可以为一个对象,包含0个或多个要更新的key。最简单的用法为:

this.setState({  key1: value1, key2: value2
});
复制代码

这种方式能应付大部分的应用场景,但是看看下面这种情况:

this.setState({  count: this.state.count + 1
});
this.setState({  count: this.state.count + 1
});
复制代码

最后得到的count却是不可控的。因为setState不会立即改变this.state,而是挂起状态转换,调用setState方法后立即访问this.state可能得到的是旧的值。

setState方法不会阻塞state更新完毕

第二个setState可能还没等待第一次的state更新完毕就开始执行了,所以最后count可能只加了1。

这时setState的第二个参数就派上用场了,第二个参数是state更新完毕的回调函数

this.setState({  count: this.state.count + 1
}, () => {this.setState({count: this.state.count + 1});
});
复制代码

不过看起来很怪,es6中可以使用Promise更优雅的使用这个函数,封装一下setState

function setStateAsync(nextState){  return new Promise(resolve => {this.setState(nextState, resolve);});
}
复制代码

上面的例子就可以这样写

async func() {  ...await this.setStateAsync({count: this.state.count + 1});await this.setStateAsync({count: this.state.count + 1});
}
复制代码

顺眼多了。

函数方式

nextState也可以是一个function,称为状态计算函数,结构为function(state, props) => newState。这个函数会将每次更新加入队列中,执行时通过当前的stateprops来获取新的state。那么上面的例子就可以这样写

this.setState((state, props) => {  return {count: state.count + 1};
});
this.setState((state, props) => {  return {count: state.count + 1};
});
复制代码

每次更新时都会提取出当前的state,进行运算得到新的state,就保证了数据的同步更新。

控制渲染

默认调用setState都会重新渲染视图,但是通过shouldComponentUpdate()函数返回false来避免重新渲染。

如果可变对象无法在shouldComponentUpdate()函数中实现条件渲染,则需要控制newStateprevState不同时才调用setState来避免不必要的重新渲染。



这个问题可以有两个答案:

  1. 没啥问题。(大部分情况下)其表现和设计期望一样,足以解决目标问题。
  2. 学习曲线问题。对新手而言,一些用原生 JS 和直接的 DOM 操作可以轻松实现的效果,用 React 和 setState 实现起来就会困难重重。

React 的设计初衷本是简化应用开发流程,但是:

  • 你却不能随心所欲地操作 DOM。
  • 你不能随心所欲地(于任何时间、依赖任意数据源)更新 state。
  • 在组件的生命周期中,你并不总是能在屏幕上直接观察到渲染后的 DOM 元素,这限制了 setState() 的使用时机和方式(因为你有些 state 可能还没有渲染到屏幕上)。

在这几种情况下,困惑都来源于 React 组件生命周期的限制性(这些限制是刻意设计的,是好的)。

从属 State(Dependent State)

更新 state 时,更新结果可能依赖于:

  • 当前 state
  • 同一批次中先前的更新操作
  • 当前已渲染的 DOM (例如:组件的坐标位置、可见性、CSS 计算值等等)

当存在这几种从属 state 的时候,如果你还想简单直接地更新 state,那 React 的表现行为会让你大吃一惊,并且是以一种令人憎恶又难以调试的方式。大多数情况下,你的代码根本无法工作:要么 state 不对,要么控制台有错误。

我之所以吐槽 setState(),是因为它的这种限制性在 API 文档中并没有详细说明,关于应对这种限制性的各种通用模式也未能阐述清楚。这迫使初学者只能不断试错、Google 或者从其他社区成员那里寻求帮助,但实际上在文档中本该就有更好的新手指南。

当前关于 setState() 的文档开头如下:

setState(nextState, callback)复制代码

将 nextState 浅合并到当前 state。这是在事件处理函数和服务器请求回调函数中触发 UI 更新的主要方法。

在末尾确实也提到了其异步行为:

不保证 setState 调用会同步执行,考虑到性能问题,可能会对多次调用作批处理。

这就是很多用户层(userland) bug 的根本原因:

// 假设 state.count === 0
this.setState({count: state.count + 1});
this.setState({count: state.count + 1});
this.setState({count: state.count + 1});
// state.count === 1, 而不是 3复制代码

本质上等同于:

Object.assign(state,{count: state.count + 1},{count: state.count + 1},{count: state.count + 1}
); // {count: 1}复制代码

这在文档中并未显式说明(在另外一份特殊指南中提到了)。

文档还提到了另外一种函数式的 setState() 语法:

也可以传递一个签名为 function(state, props) => newState 的函数作为参数。这会将一个原子性的更新操作加入更新队列,在设置任何值之前,此操作会查询前一刻的 state 和 props。

...

setState() 并不会立即改变 this.state ,而是会创建一个待执行的变动。调用此方法后访问 this.state 有可能会得到当前已存在的 state(译注:指 state 尚未来得及改变)。

API 文档虽提供了些许线索,但未能以一种清晰明了的方式阐明初学者经常遇到的怪异表现。开发模式下,尽管 React 的错误信息以有效、准确著称,但当 setState() 的同步问题出现 bug 的时候控制台却没有任何警告。

Jikku Jose

Pier Bover

StackOverflow 上有关 setState() 的问题大都要归结于组件的生命周期问题。毫无疑问,React 非常流行,因此那些问题都被问烂了,也有着各种良莠不齐的回答。

那么,初学者究竟该如何掌握 setState() 呢?

在 React 的文档中还有一份名为 “ state 和生命周期”的指南,该指南提供了更多深入内容:

“…要解决此问题,请使用 setState() 的第二种形式 —— 以一个函数而不是对象作为参数,此函数的第一个参数是前一刻的 state,第二个参数是 state 更新执行瞬间的 props :”

// 正确用法
this.setState((prevState, props) => ({count: prevState.count + props.increment
}));复制代码

这个函数参数形式(有时被称为“函数式 setState()”)的工作机制更像:

[{increment: 1},{increment: 1},{increment: 1}
].reduce((prevState, props) => ({count: prevState.count + props.increment
}), {count: 0}); // {count: 3}复制代码

不明白 reduce 的工作机制? 参见 “Composing Software” 的 “Reduce” 教程。

关键点在于更新函数(updater function):

(prevState, props) => ({count: prevState.count + props.increment
})复制代码

这基本上就是个 reducer,其中 prevState 类似于一个累加器(accumulator),而 props 则像是新的数据源。类似于 Redux 中的 reducers,你可以使用任何标准的 reduce 工具库对该函数进行 reduce(包括 Array.prototype.reduce())。同样类似于 Redux,reducer 应该是 纯函数 。

注意:企图直接修改 prevState 通常都是初学者困惑的根源。

API 文档中并未提及更新函数的这些特性和要求,所以,即使少数幸运的初学者碰巧了解到函数式 setState() 可以实现一些对象字面量形式无法实现的功能,最终依然可能困惑不解。

仅仅是新手才有的问题吗?

直到现在,在处理表单或是 DOM 元素坐标位置的时候,我还是会时不时得掉到坑里去。当你使用 setState() 的时候,你必须直接面对组件生命周期的相关问题;但当你使用容器组件或是通过 props 来存储和传递 state 的时候,React 则会替你处理同步问题。

无论你有经验与否 ,处理共享的可变 state 和 state 锁(state locks)都是很棘手的。经验丰富之人只不过是能更加快速地定位问题,然后找出一个巧妙的变通方案罢了。

因为初学者从未遇到过这种问题,更不知规避方案,所以是掉坑里摔得最惨的。

当问题发生时,你当然可以选择和 React 斗个你死我活;不过,你也可以选择让 React 顺其自然的工作。这就是我说即使是对初学者而言,Redux 有时 都比 setState 更简单的原因。

在并发系统中,state 更新通常按其中一种方式进行:

  • 当其他程序(或代码)正在访问 state 时,禁止 state 的更新(例如 setState())(译注:即常见的锁机制)
  • 引入不可变性来消除共享的可变 state,从而实现对 state 的无限制访问,并且可以在任何时间创建新 state(例如 Redux)

在我看来(在向很多学生教授过这两种方法之后),相比于第二种方法,第一种方法更加容易导致错误,也更加容易令人困惑。当 state 更新被简单地阻塞时(在 setState 的例子中,也可以叫批处理化或延迟执行),解决问题的正确方法并不十分清晰明了。

当遇到 setState() 的同步问题时,我的直觉反应其实是很简单的:将 state 的管理上移到 Redux(或 MobX) 或容器组件中。基于多方面原因 ,我自己使用同时也推荐他人使用 Redux,但很显然,这并不是一条放之四海而皆准的建议。

Redux 自有其陡峭的学习曲线,但它规避了共享的可变 state 以及 state 更新同步等复杂问题。因此我发现,一旦我教会了学生如何避免可变性,接下来基本就一帆风顺了。

对于没有任何函数式编程经验的新手而言,学习 Redux 遇到的问题可能会比学习 setState()遇到的更多 —— 但是,Redux 至少有很多其作者亲自讲授的免费 教程

React 应当向 Redux 学习:有关 React 编程模式和 setState() 踩坑的视频教程定能让 React 主页锦上添花。

在渲染之前决定 State

将 state 管理移到容器组件(或 Redux)中能促使你从另一个角度思考组件 state 问题,因为这种情况下,在组件渲染之前,其 state 必须是既定的(因为你必须将其作为 props 传下去)。

重要的事情说三遍:

渲染之前,决定 state!

渲染之前,决定 state!

渲染之前,决定 state!

说完三篇之后就可以得到一个显然的推论:在 render() 函数中调用 setState() 是反模式的。

render 函数中计算从属 state 是 OK 的(比如说, state 中有 firstNamelastName,据此你计算出 fullName,在 render 函数中这样做完全是 OK 的),但我还是倾向于在容器组件中计算出从属 state ,然后通过 props 将其传递给展示组件(presentation components)。

setState() 该怎么治?

我倾向于废弃掉对象字面量形式的 setState(),我知道这(表面上看)更加易于理解也更加方便(译者:“这”指对象字面量形式的 setState()),但它也是坑之所在啊。用脚指头都能猜到,肯定有人这样写:

state.count; // 0
this.setState({count: state.count + 1});
this.setState({count: state.count + 1});
this.setState({count: state.count + 1});复制代码

然后天真就地以为 {count: 3}。批量化处理后对象的同名 props 被合并掉的情况几乎不可能是用户所期望的行为,反正我是没见过这种例子。要是真存在这种情况,那我必须说这跟 React 的实现细节耦合地太紧密了,根本不能作为有效参考用例。

我也希望 API 文档中有关 setState() 的章节能够加上“ state 和声明周期”这一深度指南的链接,这能给那些想要全面学习 setState() 的用户更多的细节内容。setState() 并非同步操作,也无任何有意义的返回结果,仅仅是简单地描述其函数签名而没有深入地探讨其各种影响和表现,这对初学者是极不友好的。

初学者必须花上大量时间去找出问题:Google 上搜、StackOverflow 上搜、GitHub issues 里搜。

setState() 为何如此严苛?

setState() 的怪异表现并非 bug,而是特性。实际上,甚至可以说这是 React 之所以存在的根本原因。

React 的一大创作动机就是保证确定性渲染:给定应用 state ,渲染出特定结果。理想情况下,给定 state 相同,渲染结果也应相同。

为了达到此目的,当发生变化时,React 通过采取一些限制性手段来管理变化。我们不能随意取得某些 DOM 节点然后就地修改之。相反,React 负责 DOM 渲染;当 state 发生改变时,也由React 决定如何重绘。我们不渲染 DOM,而是由 React 来负责。

为了避免在 state 更新的过程中触发重绘,React 引入了一条规则:

React 用于渲染的 state 不能在 DOM 渲染的过程中发生改变。我们不能决定组件 state 何时得到更新,而是由 React 来决定。

困惑就此而来。当你调用 setState() 时,你以为你设置了 state ,其实并没有。

“你就接着装逼,你以为你所以为的就是你所以为的吗?”

何时使用 setState()?

我一般只在不需要持久化 state 的自包含功能单元中使用 setState(),例如可复用的表单校验组件、自定义的日期或时间选择部件(widget)、可自定义界面的数据可视化部件等。

我称这种组件为“小部件(widget)”,它们一般由两个或两个以上组件构成:一个负责内部 state 管理的容器组件,一个或多个负责界面显示的子组件

几条立见分晓的检验方法(litmus tests):

  • 是否有其他组件是否依赖于该 state ?
  • 是否需要持久化 state ?(存储于 local storage 或服务器)

如果这两个问题的答案都是“否”的话,那使用 setState() 基本是没问题的;否则,就要另作考虑了。

据我所知,Facebook 使用受管于 Relay container 的 setState() 来包装 Facebook UI 的各个不同部分,例如大型 Facebook 应用内部的迷你型应用。于 Facebook 而言,以这种方式将复杂的数据依赖和需要实际使用这些数据的组件放在一起是很好的。

对于大型(企业级)应用,我也推荐这种策略。如果你的应用代码量非常大(十万行以上),那此策略可能是很好的 —— 但这并不意味着这种方式就不能应用于小型应用中。

类似地,并不意味着你不能将大型应用拆分成多个独立的迷你型应用。我自己就结合 Redux为企业级应用这样做过。例如,我经常将分析面板、消息管理、系统管理、团队/成员角色管理以及账单管理等模块拆分成多个独立的应用,每个应用都有其自己的 Redux store。通过 API tokens 和 OAuth,这些应用共享同一个域下的登录/session 管理,感觉就像是一个统一的应用。

对于大多数应用,我建议默认使用 Redux。需要指出的是,Dan Abramov(Redux 的作者)在这一点上和我持相反的观点。他喜欢应用尽可能地保持简单,这当然没错。传统社区有句格言如是说:“除非真得感到痛苦,否则就别用 Redux”。

而我的观点是:

“不知道自己正走在黑暗中的人是永远不会去搜寻光明的“。

正如我说过的,在某些情况下,Redux 比 setState() 更简单。通过消除一切和共享的可变 state 以及同步依赖有关的 bug,Redux 简化了 state 管理问题。

setState() 肯定要学,但即使你不想使用 Redux,你也应该学学 Redux。无论你采用何种解决方案,它都能让你从新的角度思考去应用的 state 管理问题,也可能能帮你简化应用 state。

对于有大量衍生(derived ) state 的应用而言, MobX 可能会比 setState() 和 Redux 都要好,因为它非常擅于高效地管理和组织需要通过计算得到的(calculated ) state 。

得利于其细粒度的、可观察的订阅模型,MobX也很擅于高效渲染大量(数以万计)动态 DOM 节点。因此,如果你正在开发的是一款图形游戏,或者是一个监控所有企业级微服务实例的控制台,那 MobX 可能是个很好的选择,它非常有利于实时地可视化展示这种复杂的信息。

接下来

想要全面学习如何用 React 和 Redux 开发软件?

跟着 Eric Elliott 学 Javacript,机不可失时不再来!

Eric Elliott 是 “编写 JavaScript 应用” (O’Reilly) 以及 “跟着 Eric Elliott 学 Javascript” 两书的作者。他为许多公司和组织作过贡献,例如 Adobe Systems、Zumba Fitness、The Wall Street Journal、ESPN和BBC等 , 也是很多机构的顶级艺术家,包括但不限于 Usher , Frank Ocean , Metallica。

大多数时间,他都在 San Francisco Bay Area,同这世上最美的女子在一起(译注:这是怕老婆呢还是怕老婆呢还是怕老婆呢?)。




在 setState 中使用函数替代对象

React 文档 最近改版了——如果你还没看过,你的确应该去看看!通过写一份“React 术语词典”我越来越有豁然开朗的感觉了,其过程中我也深入地通读了新文档的全部内容。阅读文档的时候,我发现了 setState 相对不为人知的一面,并由这个推文大受启发:

我想我要写一篇博文来解释其原理。

先介绍一下背景

React 中的组件是独立、可重用的代码块,它们经常有自己的状态。组件返回的 React 元素组成了应用的 UI 界面。含有本地状态的组件会有一个名为 state 的属性,当我们想要改变应用的外观或表现形式时,我们需要改变组件的状态。那么我们如何更新组件的状态呢?React 组件中有一个可用的方法叫做 setState,它通过调用 this.setState 来使得 React 重新渲染你的应用并更新 DOM。

通常更新组件的时候,我们只要调用 setState 函数并以对象的形式传入一个新的值:this.setState({someField:someValue})

但是经常会需要使用当前状态去更新组件的状态,直接访问 this.state 来更新组件到下一个状态并是不可靠的方式。根据 React 的文档:

因为 this.propsthis.state 存在异步更新的可能,你不应该根据这些值计算下一个状态。

文档中的关键词是异步!当调用 this.setState 时,DOM 并不能马上更新,React 会分批次地更新,这样才能更高效地重新渲染所有的组件。

示例

我们来看一下在 Shopsifter 中使用 setState 的典型例子(我用于收集反馈信息),在用户提交他/她的反馈信息之后,页面会显示感谢信息如下:

反馈页面的组件拥有一个布尔值的 showForm 属性,该值决定了应该显示表单还是感谢信息。我的反馈表单组件的初始化状态是这样的:

this.state = { showForm : true}
复制代码

然后,当用户点击了提交按钮,我调用了这个函数:

submit(){this.setState({showForm : !this.state.showForm});
}
复制代码

我依赖于 this.state.showForm的值来改变表单的下一个状态。这个简单的例子中,依赖这个值可能并不会导致任何问题,但是想象一下,当一个应用变得更加复杂,会有很多次调用 setState 并依次将数据渲染至 DOM ,可能 this.state.showForm的实际状态并不是你所认为的样子。

如果我们不依赖于 this.state 来计算下一个值,我们该怎样做呢?

setState 中的函数来拯救你了!

我们可以向 this.setState 传入一个函数来替代传入对象,并且可以可靠地获取组件的当前状态。上文的提交函数现在是这样写的:

submit(){this.setState(function(prevState, props){return {showForm: !prevState.showForm}});}
复制代码

通过使用函数替代对象传入 setState 的方式能够得到组件的 stateprops 属性可靠的值。值得注意的一点是,在 React 文档的例子中使用了箭头函数(这也是我将要应用到我的 Shopsifter 应用中的一项内容),因此上文的例子中我的函数使用的仍然是 ES5 的语法。

如果你知道自己将要使用 setState 来更新组件,并且你知道自己将要使用当前组件的状态或者属性值来计算下一个状态,我推荐你传入一个函数作为 this.setState 的第一个参数而不用对象的解决方案。

我希望这能帮助你做出更好、更可靠的 React 应用!





更合理的 setState()

原文发表在我的博客:www.erichain.me/2017/04/17/…

React 是我做前端以来接触到的第三个框架(前两个分别是 Angular 和 Vue),无论是从开发体验上和效率上,这都是一门非常优秀的框架,非常值得学习。

原谅我说了一些废话,以下是正文。

借助于 Redux,我们可以轻松的对 React 中的状态进行管理和维护,同时,React 也为我们提供了组件内的状态管理的方案,也就是 setState()。本文不会涉及到 Redux,我们将从 Component 的角度来说明你不知道的以及更合理的 setState()

先说说大家都知道的

在 React 文档的 State and Lifecycle 一章中,其实有明确的说明 setState() 的用法,向 setState() 中传入一个对象来对已有的 state 进行更新。

比如现在有下面的这样一段代码:

class MyComponent extends React.Component {constructor(props) {super(props);this.state = {count: this.state.count + 1};}
}复制代码

我们如果想要对这个 state 进行更新的话,就可以这样使用 setState()

this.setState({count: 1
});复制代码

你可能不知道的

最基本的用法世人皆知,但是,在 React 的文档下面,还写着,处理关于异步更新 state 的问题的时候,就不能简单地传入对象来进行更新了。这个时候,需要采用另外一种方式来对 state 进行更新。

setState() 不仅能够接受一个对象作为参数,还能够接受一个函数作为参数。函数的参数即为 state 的前一个状态以及 props。

所以,我们可以向下面这样来更新 state:

this.setState((prevState, props) => ({ count: prevState.count + 1 }));复制代码

这样写的话,能够达到同样的效果。那么,他们之间有什么区别呢?

区别

我们来详细探讨一下为什么会有两种设置 state 的方案,他们之间有什么区别,我们应该在何时使用何种方案来更新我们的 state 才是最好的。

此处,为了能够明确的看出 state 的更新,我们采用一个比较简单的例子来进行说明。

我们设置一个累加器,在 state 上设置一个 count 属性,同时,为其增加一个 increment 方法,通过这个 increment 方法来更新 count

此处,我们采用给 setState() 传入对象的方式来更新 state,同时,我们在此处设置每调用一次 increment 方法的时候,就调用两次 setState()。具体的原因我们在后文中会讲解。

具体的代码如下:

class IncrementByObject extends React.Component {constructor(props) {super(props);this.state = {count: 0};this.increment = this.increment.bind(this);}// 此处设置调用两次 setState()increment() {this.setState({count: this.state.count + 1});this.setState({count: this.state.count + 1});}render() {return (<div><button onClick={this.increment}>IncrementByObject</button><span>{this.state.count}</span></div>);}
}ReactDOM.render(<IncrementByObject />,document.getElementById('root')
);复制代码

这时候,我们点击 button 的时候,count 就会更新了。但是,可能与我们所预期的有所差别。我们设置了点击一次就调用两次 setState(),但是,count 每一次却还是只增加了 1,所以这是为什么呢?

其实,在 React 内部,对于这种情况,采用的是对象合并的操作,就和我们所熟知的 Object.assign() 执行的结果一样。

比如,我们有以下的代码:

Object.assign({}, { a: 2, b: 3 }, { a: 1, c: 4 });复制代码

那么,我们最终得到的结果将会是 { a: 1, b: 3, c: 4 }。对象合并的操作,属性值将会以最后设置的属性的值为准,如果发现之前存在相同的属性,那么,这个属性将会被后设置的属性所替换。所以,也就不难理解为什么我们调用了两次 setState() 之后,count 依然只增加了 1 了。

用简短的代码说明就是这样:

this.setState({count: this.state.count + 1
});// 同理于
Object.assign({}, this.state, { count: this.state.count + 1 });复制代码

以上是我们采用对象的方式传入 setState() 来更新 state 的说明。接下来我们再看看使用函数的方式来更新 state 会有怎么样的效果呢?

我们将上面的累加器采用另外的方式来实现一次,在 setState() 的时候,我们采用传入一个函数的方式来更新我们的 state。

class IncrementByFunction extends React.Component {constructor(props) {super(props);this.state = {count: 0};this.increment = this.increment.bind(this);}increment() {// 采用传入函数的方式来更新 statethis.setState((prevState, props) => ({count: prevState.count + 1}));this.setState((prevState, props) => ({count: prevState.count + 1}));}render() {return (<div><button onClick={this.increment}>IncrementByFunction</button><span>{this.state.count}</span></div>);}
}ReactDOM.render(<IncrementByFunction />,document.getElementById('root')
);复制代码

当我们再次点击按钮的时候,就会发现,我们的累加器就会每次增加 2 了。

我们可以通过查看 React 的源代码来找出这两种更新 state 的区别 (此处只展示通过传入函数进行更新的方式的部分源码)。

在 React 的源代码中,我们可以看到这样一句代码:

this.updater.enqueueSetState(this, partialState, callback, 'setState');复制代码

然后,enqueueSetState 函数中又会有这样的实现:

queue.push(partialState);
enqueueUpdate(internalInstance);复制代码

所以,与传入对象更新 state 的方式不同,我们传入函数来更新 state 的时候,React 会把我们更新 state 的函数加入到一个队列里面,然后,按照函数的顺序依次调用。同时,为每个函数传入 state 的前一个状态,这样,就能更合理的来更新我们的 state 了。

问题所在

那么,这就是传入对象来更新 state 会导致的问题吗?当然,这只是问题之一,还不是主要的问题。

我们之前也说过,我们在处理异步更新的时候,需要用到传入函数的方式来更新我们的 state。这样,在更新下一个 state 的时候,我们能够正确的获取到之前的 state,并在在其基础之上进行相应的修改。而不是简单地执行所谓的对象合并。

所以说,我们建议,在使用 setState 的时候,采用传入函数来更新 state 的方式,这样也是一个更合理的方式。


查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 微服务之RPC与RESTful

    在微服务中,使用什么协议来构建服务体系,一直是个热门话题。 争论的焦点集中在两个候选技术: (binary) RPC or Restful。以Apache Thrift为代表的二进制RPC,支持多种语言(但不是所有语言),四层通讯协议,性能高,节省带宽。相对Restful协议,使用Thrifpt RPC,在同等硬件…...

    2024/4/17 2:26:05
  2. 渗透新手入门

    今天有点闲时间了,想要学习网络安全这一技术的先生们,女士们,我来讲讲怎么样才能学懂这一技术。大家都不知道从哪里开始学习。道长我呢,今天就给你们说一说。这里首先要向那些开发并且开源的程序员们致敬!,如果没有他们的长期坚持,就不会有后面我们学习及开发新工具的方…...

    2024/4/27 13:30:33
  3. vs 2019 VisualStudio 2019 默认创建类和接口不加public问题

    VisualStudio 2019 默认创建类和接口不加public问题默认是这样的:C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class这个路径下的 class.cs 加个public...

    2024/3/28 20:31:05
  4. 基于C#和SQL Server的图书馆管理系统

    项目代码下载地址:https://download.csdn.net/download/James_Bond_slm/12478303...

    2024/4/27 13:35:08
  5. 浅谈restful与ajax

    1.RESTFUL风格最近在web的学习上学习了一个新内容,resuful风格,从字面意思上就可以看到知道是一种风格,由于标准是必须遵从的,所以它在这方面上又不是一种代码设计的标准,废话不多说,restful到底是什么呢?在网上看到了一句很能概括的话:URL定位资源,用HTTP动词(GET,PO…...

    2024/4/27 13:59:30
  6. Keras中的Embedding和Word2vec的区别

    最近在接触深度学习,在自然语言处理的应用中,不可避免的要把文本转换成词向量,那么如何转化它呢?以及目前几种主要转化方式是有什么不一样呢?接下来借助我最近做的文本分类的问题加以解释说明,主要理清word2vec和keras提供的Embedding层的差别,这也是一度使我比较困惑的…...

    2024/4/17 2:26:05
  7. TCP SYN Flooding

    Synflood:该攻击以多个随机的源主机地址向目的路由器发送SYN包,而在收到目的路由器的SYN ACK后并不回应,这样,目的路由器就为这些源主机建立了大量的连接队列,而且由于没有收到ACK一直维护着这些队列,造成了资源的大量消耗而不能向正常请求提供服务,甚至导致路由器崩溃.服…...

    2024/4/27 14:42:08
  8. 获取整个url地址参数字符串(无?符号后面参数)

    window.getAllUrlParam = function () { return window.location.search.substr(1); }; 查看前端面试题小程序...

    2024/4/17 2:26:23
  9. android NFC开发案例+MifareClassic格式密码修改(键值keyA修改)

    在开始之前可以先了解一些NFC的的基础知识。 连接 android nfc中MifareClassic格式的读写 http://www.cnblogs.com/jyycnblogs/p/5077609.html NFC API Reference中英文 http://www.cnblogs.com/skyseraph/archive/2013/01/27/2876236.html# 感谢Eternal_memory 和 SkySe…...

    2024/4/27 14:49:01
  10. C# 反射总结

    需求1:根据对象中某个字段的字符串名称,来改变该对象某个字段的值 public class Bean {public string Name { get; set; }public int Age { get; set; }public string Address; }var b = new Bean();b.Name = "zcfly";b.Age = 12;b.Address = "China";De…...

    2024/4/17 2:25:59
  11. torch.nn.Embedding()

    torch.nn.Embedding是一个简单的查询表,它存储固定字典和大小的嵌入项。此模块通常用于存储词嵌入并使用索引检索它们。模块的输入是一个索引列表,输出是相应的词embeddings。num_embeddings 表示单词的总数目, embedding_dim 表示词嵌入的维度,词嵌入就相当于是一个大矩阵…...

    2024/4/27 14:54:14
  12. 什么是RESTful风格?

    什么是RESTful风格? 一、概述(百度百科) REST(英文:Representational State Transfer,简称REST) 一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易…...

    2024/4/27 13:25:59
  13. 【JavaScript】ReactJS基础

    初探React,将我们的View标签化前言 我之前喜欢玩一款游戏:全民飞机大战,而且有点痴迷其中,如果你想站在游戏的第一阶梯,便需要不断的练技术练装备,但是腾讯的游戏一般而言是有点恶心的,他会不断的出新飞机、新装备、新宠物,所以,很多时候你一个飞机以及装备还没满级,…...

    2024/4/27 13:32:20
  14. 瑞星杀毒软件被曝高危漏洞

    1月27日消息 波兰一家安全组织(www.ntinternals.org)近日公布:瑞星杀毒软件长期存在两个“本地提权”0day安全漏洞,使木马病毒能轻易获得瑞星用户的系统控制权。国内安全厂商金山和360的技术专家均已确认了这两个漏洞的存在,一旦受到黑客攻击,数千万瑞星用户将丧失对木马…...

    2024/3/31 21:37:25
  15. 学生管理系统可行性分析

    引言 学籍管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学籍管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如效率低、保密性差,另外时…...

    2024/4/26 17:50:09
  16. 用实践做总结,Restful API风格仅适用于业务逻辑简单的小型应用

    很苦恼编程界目前的一个现状:有很多人都说Restful不行或者不好,最后大多数人都被Restful的支持和拥簇者怼了回来,说你根本就不懂得什么是Restful,因为在Restful的世界里,一切你要操作的对象都可以抽象成资源,你们这些说Restful不好的人,根本就没有理解Restful的精髓,在…...

    2024/4/17 2:25:53
  17. embedding lookup

    1.embedding embedding现在在推荐系统、ctr预估系统中的使用无处不在。简单来理解就是,对于各种高维稀疏的特征,工作将单个特征映射成为一个低维稠密向量,将高维稀疏特征由"精确匹配"变成一个在embedding向量上的"模糊匹配",从而提高了算法的性能,将高…...

    2024/4/17 2:25:47
  18. 中国民间的惊人秘术! (仅供参考,可以试验,但请别冒险)

    中国民间的惊人秘术!不要乱用啊 仅供参考,可以试验,但请别冒险http://four-corner.appspot.com/http://anforen.5d6d.com/“半夜鬼敲门”黄鳝,大家都知道吧?这里用的就是黄鳝的血,要粘稠一点但不凝固。一般夏天用。傍晚的时候,把血从外面 均匀的涂在你家大门上,然后回屋…...

    2024/4/17 2:28:17
  19. Restful API基础概念

    1.restful简介以及资源介绍1-1 RESTful是什么?本质:一种软件架构风格核心:面向对象解决问题:降低开发复杂性;提高系统可伸缩性1-2RESTful的设计概念和准则1)网络上的所有事物都可以被抽象为资源.2)每一个资源都有唯一的资源标识,对资源的操作不会改变这些标识.3)所有操作都是…...

    2024/4/17 2:26:53
  20. 轻松学 Webpack 4 视频教程(36 个视频)

    轻松学 Webpack 4 视频教程(36 个视频) 轻松学 Webpack 4 视频教程 #1 课程介绍「03:20」 轻松学 Webpack 4 视频教程 #2 安装「05:04」 轻松学 Webpack 4 视频教程 #3 zero config「05:48」 轻松学 Webpack 4 视频教程 #4 Mode「Pro」「06:46」 轻松学 Webpack 4 视频教程 #…...

    2024/4/17 2:26:53

最新文章

  1. 第三节课,后端登录【1】.2--本人

    一、视频链接 网址&#xff1a; 后端用户脱敏和session-CSDN直播 二、代码开始 2.1 新建一个request参数。完成用户登录态键 快捷建&#xff0c; 全局变量 代码&#xff1a; // 3.记录用户的登录态/*** 这段代码是Java Web开发中的一部分&#xff0c;用于在会话&#xff08…...

    2024/4/27 16:02:55
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 蓝桥杯加训

    1.两只塔姆沃斯牛&#xff08;模拟&#xff09; 思路&#xff1a;人和牛都记录三个数据&#xff0c;当前坐标和走的方向&#xff0c;如果人和牛的坐标和方向走重复了&#xff0c;那就说明一直在绕圈圈&#xff0c;无解 #include<iostream> using namespace std; const i…...

    2024/4/23 12:04:51
  4. 分享一个基于Multi-SLAM+3DGS的新一代三维内容生产技术

    基于智能空间计算&#xff0c;新一代超逼真三维内容生成技术。 可自动化生成超逼真的大场景三维模型&#xff0c;并在各类终端和空间计算设备中&#xff0c;实现前所未有的沉浸式体验。 更可接入专业三维软件和应用平台&#xff0c;进行深度的模型开发与场景落地。 支持超大复杂…...

    2024/4/26 22:40:40
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/26 18:09:39
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/26 20:12:18
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/26 23:05:52
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/27 4:00:35
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/25 18:39:22
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/26 21:56:58
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/27 9:01:45
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/26 16:00:35
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/25 18:39:16
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/26 22:01:59
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/25 2:10:52
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/25 18:39:00
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/26 19:46:12
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/27 11:43:08
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/27 8:32:30
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57