- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的increaseCount方法中,我有3种不同的方法来增加计数。我认为第一个方法可以使用两次,但它不起作用,因为它似乎合并了回调中的 setState 。使用回调函数的正确方法是什么?为什么箭头表示法有效? prevState.count 是如何定义的?它永远不会设置为 0
import React from "react";
import { render } from "react-dom";
const styles = {
fontFamily: "sans-serif",
textAlign: "center"
};
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
increaseCount() {
console.log(this);
this.setState({ count: this.state.count }, function() {
this.setState({ count: this.state.count + 1 });
});
this.setState({ count: this.state.count + 1 });
this.setState(prevState=>({ count: prevState.count + 1 }));
}
render() {
return (
<div style={styles}>
<div>
<button onClick={() => this.increaseCount()}>Increase</button>
</div>
<h2>{this.state.count}</h2>
</div>
);
}
}
render(<App />, document.getElementById("root"));
最佳答案
据我所知,只有第三种方法才是增加状态值的正确方法。回顾你的尝试:
this.setState({ count: this.state.count }, function() {
this.setState({ count: this.state.count + 1 });
});
此代码段是多余的(您将计数设置为相同的值),然后当状态更改完成时,您可以通过向 this.state.count
加 1 来增加计数。虽然这在这里很好,但您可以一开始就这样做(如下一个片段所示)。
下一个:
this.setState({ count: this.state.count + 1 });
更好,但是 setState
方法是异步的,因此实际的状态更改要稍后才会发生。这意味着这在大多数情况下都有效,但如果您调用它两次,它不会增加两倍,因为this.state.count
尚未更新当第二次调用发生时。
最后,您的最后一次尝试看起来很完美:
this.setState(prevState=>({ count: prevState.count + 1 }));
这使用了函数 setState
语法,其中 React 将为您的回调函数提供当前状态,并且您应该读取它并返回所需的新状态。使用这种风格,您可以调用它两次(或任意次数),并且每次调用都会适本地增加计数。
解决您的其他一些问题:
it seems to merge the setState in the callback.
正确。来自下面链接的文档:
<小时/>React may batch multiple setState() calls into a single update for performance.
What's the proper way to use a callback function and why does the arrow notation work?
函数 setState
是一个新的 React 功能。箭头函数很好,但不是必需的(除非您在回调中访问 this
)。来自他们的documentation here :
<小时/>To fix it, use a second form of setState() that accepts a function rather than an object. That function will receive the previous state as the first argument, and the props at the time the update is applied as the second argument:
// Correct
this.setState((prevState, props) => ({
counter: prevState.counter + props.increment
}));We used an arrow function above, but it also works with regular functions:
// Correct
this.setState(function(prevState, props) {
return {
counter: prevState.counter + props.increment
};
});
How is prevState.count being defined? It is never set to 0
它在构造函数中被设置为零。该行:
this.state = {
count: 0
};
是最初设置它的内容。从那时起,当前状态(无论是什么)将传递给您的 setState
回调函数。
抱歉,这个答案在我意识到之前就失控了。希望这会有所帮助,LMK,如果我没有捕获要点或者还有更多问题
关于javascript - 使用回调函数和理解箭头表示法的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49415229/
Byte byte1=10; Short short1=20; Integer integer=30; 在上面的代码中自动装箱成功在这里查看下面的代码,我正在明确地进行 casitng,因为它默认将
这里有几个相关的问题。 根据标题,如果我们将变量类型指定为 long 或 float、double,为什么它是一个要求?编译器不会在编译时评估变量的类型吗? Java 将所有整型文字视为 int -
我最近一直在使用一些 bash 脚本,并且一直在浏览手册页。根据我收集到的信息,$(( )) 是否表示 expr 而 [ ] 是否表示 test? 对于 $(( )): echo $(( 5 + 3
我有 UILabel,其中显示了 int 值,我希望如果值以千为单位,例如 1000,那么标签应该在 2000 年及以后显示 1k 和 2k。如何实现? 最佳答案 这个怎么样? int myNum =
我正在自学 verilog 并尝试编写失败模型。我在指定部分遇到了以下 ck->q 延迟弧的建模,但无法理解它到底是做什么的。 (posege CK => (Q : 1'b1))=(0, 0); 谁能
考虑这样一个句子: John Smith travelled to Washington. 在美好的一天,名称标记者会将“约翰·史密斯”识别为一个人,将“华盛顿”识别为一个地方。然而,如果没有其他证据
有没有办法通过某种元处理器或预处理器告诉 JavaScript 单词 AND 等于 && 而单词 OR 等于 ||和 <> 等同于 !===? 也许将 THEN 等同于 { 结束到 不要! 最佳答案
我正在处理一个非常大的图,它有 5 亿个节点,节点的平均度为 100。所以它是一种稀疏图。我还必须存储每条边的权重。我目前正在使用两个 vector ,如下所示 // V could be 100 m
我想使用 Python 表示一组整数范围,其中可以动态修改该集合并测试其是否包含在内。具体来说,我想将其应用于文件中的地址范围或行号。 我可以定义我关心的地址范围: 200 - 400 450 -
>>> x = -4 >>> print("{} {:b}".format(x, x)) -4 -100 >>> mask = 0xFFFFFFFF >>> print("{} {:b}".forma
虽然代码不多,但简单明了 复制代码 代码如下: preg_match('/^(?!string)/', 'aa') === true 这个用来验证一个字符串是否是非'string'开头的,
我正在尝试创建一些 SQLAlchemy 模型,并且正在努力解决如何将 timedelta 正确应用于特定列的问题。 timedelta(以天为单位指定)作为整数存储在单独的表 (Shifts) 中,
“Range: bytes=0-” header 是什么意思?是整个文件吗?我尝试发回 0 个字节但没有成功,当我发送整个文件时它可以正常工作,但我在流式上下文中不止一次收到此请求,它看起来不正确。
要创建时间序列的 SAX 表示,您首先需要计算数据的 PAA(分段聚合近似),然后将答案映射到符号表。但是,在计算 PAA 之前,您需要对数据进行标准化。 我正在对数据进行标准化,但我不知道之后如何计
假设我有一个 RESTful、超文本驱动的服务来模拟冰淇淋店。为了帮助更好地管理我的商店,我希望能够显示每日报告,列出所售每种冰淇淋的数量和美元值(value)。 这种报告功能似乎可以作为名为 Dai
我需要以 RDF 格式表示句子。 换句话说,“约翰喜欢可乐”将自动表示为: Subject : John Predicate : Likes Object : Coke 有谁知道我应该从哪里开始?是否
我即将编写一个解析器,将文本文件逐行读取到不同类型的结构中,并将这些结构提供给回调(观察者或访问者 - 尚不确定)。 文本文件包含 MT-940 数据 - SWIFT 银行对帐单。 这些行由一个指定类
我主要是一名 C++ 开发人员,但我经常编写 Python 脚本。我目前正在为游戏编写骰子模拟器,但我不确定在 Python 中解决我的问题的最佳方法。 一共有三种玩家技能,每个玩家一强、中一、弱一。
在过去的 5 个小时里,我一直在寻找答案。尽管我找到了很多答案,但它们并没有以任何方式提供帮助。 我基本上要寻找的是任何 32 位无符号整数的按位异或运算符的数学、算术唯一表示。 尽管这听起来很简单,
我需要将依赖项存储在 DAG 中。 (我们正在细粒度地规划新的学校类(class)) 我们正在使用 rails 3 注意事项 宽于深 很大 我估计每个节点有 5-10 个链接。随着系统的增长,这将增加
我是一名优秀的程序员,十分优秀!