这是所有新react开发人员的一个普遍问题,但不知何故,我无法理解可用解决方案背后的逻辑。我试图使用钩子更新状态变量,并尝试它读取更新后的值,但它总是返回以前的值而不是新值。下面是我代码执行的顺序。
onClick={setTransactionAccountId}
单击按钮时,它执行以下代码并更新状态,但console.log
显示旧值。
const [accountId, setAccountId] = useState(0);
const setTransactionAccountId = e => {
console.log("Clicked ID:", e.currentTarget.value);
setAccountId(e.currentTarget.value);
console.log("accountId:", accountId);
};
控制台日志:
单击的ID:0 AccountID:0
单击的ID:1 AccountId:0
谁能告诉我这种行为背后的原因和如何解决。
这是因为setstate
是异步的。在状态更新之前执行console.log('account id:',accountId)
仍然会给出以前的状态值。如果您添加了Async/Await,那么应该可以解决这个问题。
null
const setTransactionAccountId = async (e) => {
console.log('Clicked ID:', e.currentTarget.value)
await setAccountId(e.currentTarget.value)
console.log('accountId:', accountId)
}
来自react文档
React可能会将多个setState()调用批处理到一个更新中以提高性能。
因为this.props和this.state可能是异步更新的,所以您不应该依赖于它们的值来计算下一个状态。
状态更新可能是批处理和异步更新的,因此在调用console.log()时状态可能没有更新。您将在下一次调用useEffect钩子时得到保证更新的结果。
accountId
将不会在此呈现中更新。您必须等待下一次呈现以更新它。只有在调用useState
时,AccountId
才会填充到函数组件的顶部。你在渲染的中间。如果需要实际值,请不断从e.currenttarget.value
中提取它。
我似乎无法找到为所有文件启用行号的设置,但我必须始终右键单击并根据每个文件启用此设置。 这必须有一个全局设置,对吧?
我是FCM的新手。我不能让FCM使用我的应用图标作为通知图标,图标总是一个白色的空白。 我将一个图标导入到文件夹,但似乎没有任何改变。就像一些人说的,这是因为这个问题中的Lollipop通知 但问题是,FCM通知自动弹出,我无法让通知生成器覆盖图标。我怎么改?
问题内容: 我想始终显示输入“数字”字段的上/下箭头。这可能吗?到目前为止,我还没有任何运气… HTML: CSS: 问题答案: 您可以使用Opacity属性(至少在Chrome中)实现此目的: 如上所述,这可能仅在Chrome中有效。因此,请谨慎使用此代码,不要对其他浏览器进行回退。
我希望始终显示输入“数字”字段的上/下箭头。这可能吗?到目前为止我还没有任何运气 http://jsfiddle.net/oneeezy/qunbnL6u/ HTML: CSS:
问题内容: 下面是我的代码。 Calendar.HOUR应该给我 public static final int HOUR get和set的字段号,指示上午或下午的时间。HOUR用于12小时制(0-11)。中午和午夜用0而不是12表示。例如,在10:04:15.250 PM,小时是10。 不管我运行该代码多少次,它总是给我相同的unique_id。(101213),而我在计算机上的本地时间是下午1
问题内容: 我使用JFace 在我的JFace行的单元格中显示一个按钮,该按钮在激活时会触发对话框。此行为在以下代码中效果很好,但是只有在显式选择了托管按钮的表的单元格时,该按钮才会出现。 有没有一种方法可以强制按钮始终显示在表格中,而不仅是在选中单元格时?(相同的行为适用于通过重写方法设置的标签) 谢谢 问题答案: 您一次只能编辑一个单元格。除非您进行一些自定义,否则将不支持一次编辑多个单元格。