css - 从 React 中的一个远程组件触发一个组件中的 CSS 动画
问题描述
我有一个相当复杂的 React16/Redux 单页应用程序。
我试图找到一种方法来触发组件或 DOM 元素(我们称之为Foo
组件)上的 CSS 动画,当用户按下一个按钮(我们称之为组件)时,它离这个/Bar
很“远” 。component
DOM element
我想避免通过回调列表或通过 Redux,使用 kind observer pattern
,以便我可以执行以下操作:
class Bar extends React.Component {
...
onButtonClick() {
allFooComponentsOnThePageShouldBlinkFor1Second();
}
}
有没有一种简单的方法可以做到这一点?
解决方案
因此,您最好的选择可能是使用 Redux 或类似的状态管理系统。也就是说,您可以通过使用包装组件的本地状态来做到这一点,如本问题所示。从长远来看,我认为这不会比使用 Redux 更快或更容易,但我们开始吧:
您的组件Wrapper
将具有一些本地状态,用于跟踪是否Bar
应该闪烁,并具有更改传递给的状态的功能Foo
。您需要小心确保this
单击处理程序中的 始终指向Wrapper
. 我在这里用箭头函数完成了它。如果您更愿意使用.bind
,那么您可以在您的实现中进行更改。
class Wrapper extends React.Component {
// accessible through `this.state`
state = { fooShouldBlink: false };
handleClick = () => {
// arrow function preserves `this` as `Wrapper`
this.setState({ fooShouldBlink: true }, () => {
// Resets state after 1 second so that this can be done more than once.
// If that's not needed, you can take this out
setTimeout(() => this.setState({ fooShouldBlink: false }), 1000);
});
}
render () {
return (
<div>
<Bar clickHandler={this.handleClick}/>
<Foo blinkState={this.state.fooShouldBlink} />
<Foo blinkState={this.state.fooShouldBlink} />
<Foo blinkState={this.state.fooShouldBlink} />
</div>
);
}
}
推荐阅读
- reactjs - 键入'{ src:字符串;}' 不可分配给类型 'SVGProps
- c++ - CIP 协议:cip 协议中数据的结构和值
- unit-testing - 在 golang 中模拟依赖项是否需要 DI(依赖项注入)?
- git - 为什么按名称删除远程分支会产生错误,而按引用删除则不会?
- flutter - 在开始 Flutter 之前我需要了解 Dart
- powerbi - PowerBI-JavaScript API 中 RDL(分页)报表的过滤器(参数)
- python - Flask:确定请求发往哪个 IP 地址
- php - WKHTMLTOPDF (knplabs - snappy) 页脚样式导入
- java - spring resttemplate中如何实现批处理
- php - Composer 下载包并放入供应商地图,但服务提供商无法识别它 laravel 6