我需要设置一个从事件中获取的状态字段,但是当我将一个函数传递给它时,它不会被设置。组件和方法如下所示:
constructor(props: SomeProps, context: any) {
super(props, context);
this.state = {
isFiltering: props.isFiltering,
anchor: "",
};
}
private toggleFilter = (event: any) => {
event.persist()
this.setState(prevState => ({
isFiltering: !prevState.isFiltering,
anchor: event.currentTarget // does not work, it's null
}));
}
如果删除,event.persist()
则会出现以下错误:
由于性能原因,此综合事件被重用。如果看到此消息,则说明正在
currentTarget
释放/无效化的合成事件上访问该方法。这是一项无操作功能。如果必须保留原始的合成事件,请使用event.persist()。有关更多信息,请参见https://facebook.github.io/react/docs/events.html#event-
pooling
。
由于某些原因,以下代码可以工作:
private toggleFilter = (event: any) => {
this.setState({anchor:event.currentTarget}) // works fine
this.setState(prevState => ({
isFiltering: !prevState.isFiltering,
}));
}
为什么以上方法有效,但在我使用时无效this.setState(prevState=> ...)
?
这是预期的行为 ,因为event.persist()
这并不意味着currentTarget
没有被取消,实际上应该是-与浏览器的本机实现兼容。
这意味着,如果要以异步方式访问currentTarget,则需要像在答案中一样将其缓存在变量中。
当事件冒泡时,currentTarget会发生变化–如果在接收事件的元素上有一个事件处理程序,而在其祖先上有其他事件处理程序,则它们将为currentTarget看到不同的值。IIRC消除它与本机事件发生的现象是一致的。如果没有,请告诉我,我们将在这里重新考虑我们的行为。
在官方的React仓库中查看讨论的源代码,以及Sophie提供的以下一些我感动的片段。
var savedEvent;
var savedTarget;
divb.addEventListener('click', function(e) {
savedEvent = e;
savedTarget = e.currentTarget;
setTimeout(function() {
console.log('b: currentTarget is now ' + e.currentTarget);
}, 0);
}, false);
diva.addEventListener('click', function(e) {
console.log('same event object? ' + (e === savedEvent));
console.log('same target? ' + (savedTarget === e.currentTarget));
setTimeout(function() {
console.log('a: currentTarget is now ' + e.currentTarget);
}, 0);
}, false);
div {
padding: 50px;
background: rgba(0,0,0,0.5);
color: white;
}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>JS Bin</title>
</head>
<body>
<div id="diva"><div id="divb"> Click me and see output! </div></div>
</body>
</html>
我已经开始学习ReactJS,有一个关于无状态和有状态组件的问题。一般来说,我遵循组件和容器的分离,如下所示。有状态函数在组件文件夹中,其他逻辑操作在容器文件夹下。文件夹结构 让我们思考材料UI下拉列表。 为了打开和关闭下拉菜单和方法更改打开状态,这意味着它是有状态组件。但没有其他变化(省略年龄设置)。它似乎是可重用的组件,但包括状态与非常简单的操作,如打开和关闭。我应该放入哪个文件夹?容器还是组
是否有方法将defaultValue传递给状态?我也尝试了value={},但值根本不变。
问题内容: 我有以下基于渲染下拉列表呈现用户的类。如果我选择“字母”,则将按字母顺序列出用户;当我选择“组”时,将按组顺序列出用户。 在组件中,我正在通过props.members中的函数设置组件状态对象。 当我选择“组”排序时,组件正在卸载并且正在DOM中安装。同样,当我切换回“字母”排序时,在组件中预先设置的状态变量(成员)将变为NULL,因为该组件已从DOM中删除。 重新渲染b’coz时道具
问题内容: 我正在创建一个简单的聊天应用程序,在其中我通过axios对数据库进行api调用,该API返回了一系列消息对象。我可以在componentWillMount中进行axios调用时获取数据。然后,我试图设置状态以显示对话。这是代码: 我看过一些有关生命周期功能和设置状态的帖子,似乎我在做正确的事情。 再次强调,axios调用正常,设置状态不正常。我仍然看到一个空数组。提前致谢! 编辑:这是
问题内容: 我有一个类似的反应成分 使用react-navigation我通常会通过说来应用导航选项 使用打字稿我得到了错误 我怎样才能解决这个问题? 我尝试编写一个界面 但是没有运气。 问题答案: 关键思想是为常量指定正确的类型。可能已经提供了该类型。但是,您也可以这样扩展内置接口:
本文向大家介绍ReactJs设置css样式的方法,包括了ReactJs设置css样式的方法的使用技巧和注意事项,需要的朋友参考一下 前段时间看了React Native,但是感觉在安卓反面的开发并不成熟.有较多功能有待完善,而且自己在实际运用的过程中在一些模块上遇到了不晓得阻力,又苦于网上没有找到那么多资源.于是打算先放一段时间,还是回过头来看ReactJs吧. React颠覆了html的传统思维