问题标签 [setstate]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - React native / redux - setState 在现有状态转换期间无法更新
我正在使用 React Native 和 redux 开发一个应用程序。用于 Ajax 请求的 Express js。
我的 Ajax 请求中的数据不会加载,这是我收到的警告:
警告:setState(...):在现有状态转换期间无法更新(例如在
render
或其他组件的构造函数内)。渲染方法应该是 props 和 state 的纯函数;构造函数副作用是一种反模式,但可以移至componentWillMount
.
不完全确定我做错了什么?
index.ios.js
store.js
这是我的视图文件:
动作文件:
这是减速器:
java - React setState 不起作用,出现错误
尝试使用 setState 时出现以下错误:
我不知道我要去哪里错了,请有人指出我正确的方向。这是我的代码:
reactjs - 反应 setState/getState 和异步
为什么 React 中没有异步 getState 函数?
文档告诉我们 setState 是异步的。很好,但这意味着我们不能安全地使用 this.state并且我们还需要一个异步 getState 来尊重执行顺序。
据我了解,我们永远不应该使用 this.state 并使用这样的 getState 函数:
我的思维方式在这里遗漏了什么?为什么 React 中不存在这样的功能?
- 编辑 -
正如我的一个朋友告诉我的那样,这并不清楚,因为我不相信但第一个答案,让我们分析一些代码:
这个简单的例子表明我们不能在所有情况下都直接使用 this.state,因为 setState 是异步的。
这是一个可以使用 getState 的反例: http ://codepen.io/Epithor/pen/ZLavWR?editors=0010#0
简短的回答:不好的做法,甚至不确定 getState 给我们当前
解决方法很简单,但是我们可以分解一些函数并在不关心上下文的情况下使用它们这一事实似乎很有趣,不是吗?
因此,当许多事件以特定顺序发生时,有些事件会更改状态,有些会读取状态:您如何确定,当事件读取状态时使用this.state读取良好状态,因为所有更改都是异步的?
事实上,一切都是关于时间的:
由于您无法预测事件 1 或 2 的 setState 究竟何时会发生,您如何保证事件 3 将真正读取事件 2 中设置的状态?
简短的回答:事件在 JS 堆栈中排队,而状态更改在内部 React 队列中排队。在伸出手之前,内部 React 队列已完全取消堆叠。
reactjs - 何时使用 React setState 回调
当一个 react 组件状态发生变化时,会调用 render 方法。因此,对于任何状态更改,都可以在渲染方法主体中执行操作。那么 setState 回调是否有特定的用例?
javascript - React - 在不使用 setState 的情况下更改状态:必须避免吗?
我的代码有效,但我有一个最佳实践问题:我有一组处于状态的对象,用户交互一次将更改一个对象的值。据我所知,我不应该直接改变状态,我应该总是使用它setState
。如果我想以任何代价避免这种情况,我将通过迭代深度克隆数组,并更改克隆。然后将状态设置为克隆。在我看来,避免改变我以后会改变的状态只会降低我的表现。
详细版本:
this.state.data 是一个对象数组。它代表论坛中的主题列表,并且收藏按钮将切换,调用clickCollect()
。由于我在状态中有一个数组,所以当我更改一项的 is_collected 属性时,我需要创建一个数组的副本以使用,并且在更改为新值后,我可以将其设置为状态。
var data = this.state.data
:这会将指针复制到数组,并且 push()、shift() 等会直接改变状态。两者data
都会this.state.data
受到影响。
var data = this.state.data.slice(0)
:这会进行浅克隆,push 和 shift 不会改变状态,但在我的克隆中,我仍然有指向状态数组元素的指针。所以如果我改变data[0].is_collected
,this.state.data[0].is_collected
也会改变。这发生在我打电话之前setState()
。
通常我应该这样做:
然后我更改索引处的值,当它为假时将其设置为真,当它为真时将其设置为假:
并改变状态:
考虑到我的数组比较大或者非常大,我猜这个迭代会降低我的APP的性能。如果我出于任何原因知道这是正确的方法,我会支付这笔费用。然而,在这个函数clickCollect
(在所有情况下,新值都会进入状态。实际上,我setState
只要求 UI 再次呈现。所以问题是:
- 在这种情况下我是否必须创建深层克隆?(
for var i in ...
) .slice(0)
如果不是,如果我的数组包含对象,那么进行浅克隆 () 是否有意义?正在对数组内部的对象进行更改,因此浅克隆仍然会更改我的状态,就像副本 (data = this.state.data
) 会做的那样。
为了简单起见,我的代码被简化了,API 调用也被删掉了。
这是一个初学者的问题,因此也欢迎采用完全不同的方法。或其他问答链接。
javascript - this.setState 使变量未定义?
我正在尝试增加我的状态变量,但每当我这样做时,就会弹出一个错误,指出变量状态未定义。我在构造函数中定义了我的变量。显然 setState 函数中发生了一些事情。
这是呈现错误的代码:
这是构造函数中定义的变量:
javascript - 根据当前状态在 React 中设置状态
在 React 中更新有状态组件时,如果组件使用当前状态来更新新状态,这被认为是一种不好的做法。
例如,如果我有一个类来存储过滤器是否处于打开状态,那么这些用于更新状态的选项之一在性能方面是否比另一个更可取?
选项1:
选项 2:
选项 3:
reactjs - 更新父状态的子方法
我知道标准是向父母传递一个方法,孩子将调用该方法来更新状态。
但是我的父母得到了太多的方法。
有没有办法让子组件用自己的方法更新父组件,所以父组件没有数百个功能?
例如:
javascript - 使用 parseFloat 时,React onChange 吞下了我的小数
我有一个简单的 onChange ,它接受用户的输入解析它并将状态设置为呈现。这是代码。
我不明白我的小数点在哪里。我知道没有适当的验证来阻止用户输入字母,但这只是一个示例应用程序来测试我遇到的这个问题。当我输入小数点时不会呈现。我哪里错了?
ajax - React-native : 无法处理的 fetch 响应
仍在学习 RN... 我正在尝试在 react-native 中使用从我的服务器fetch()
获取特定数据,然后在智能手机的浏览器中打开网页。这是我写的:
实际上,如您所见,我要求为我的服务器提供一个特定的密钥(urlKey,它在 JSON 对象中返回:responseJson.document_key)。
服务器部分一切运行良好,因为我将生成的 document_key 放入我的数据库中,我可以看到它被正确放置。
问题出在 React-native 部分:浏览器打开一个网页,this.state.urlKey
该网页**text**
的初始状态应该是该功能fetch
应该变成服务器发送的 document_key ......我错过了什么?