Javascript 像Spliting.js和anime.js这样的动画库不适用于React js
好的,我已经尝试了两个动画库,第一个和第二个,都可以在vanilla js上正常工作,但在react js上失败,你知道为什么吗?错误没有意义。请尝试这两个包的基本npm安装,并尝试在react js项目中使用它们,这两个包都不起作用。有什么原因吗?如何在react js中实际使用这些库?我猜这与React的ReactDOM有关更改DOM元素,从而在动画库找到它们之前删除所需的元素 要重新创建我的场景:Javascript 像Spliting.js和anime.js这样的动画库不适用于React js,javascript,reactjs,animation,anime.js,Javascript,Reactjs,Animation,Anime.js,好的,我已经尝试了两个动画库,第一个和第二个,都可以在vanilla js上正常工作,但在react js上失败,你知道为什么吗?错误没有意义。请尝试这两个包的基本npm安装,并尝试在react js项目中使用它们,这两个包都不起作用。有什么原因吗?如何在react js中实际使用这些库?我猜这与React的ReactDOM有关更改DOM元素,从而在动画库找到它们之前删除所需的元素 要重新创建我的场景: 请尝试运行一个简单的react js项目,并尝试逐个添加这两个动画库。要在react应用程序
请尝试运行一个简单的react js项目,并尝试逐个添加这两个动画库。要在react应用程序中使用anime.js,您可能需要查看一下东西。您可以通过执行那些实际上是钩子的库代码,而不是在组件声明本身中执行这些库代码
我的想法是使用它,它是从一开始就考虑到反应的。另一方面,react-anime只是anime.js的包装,它将其塑造成react的生命周期。许多DOM操作库都不能与react一起开箱即用,react有自己的处理方式。您可以通过执行那些实际上是钩子的库代码,而不是在组件声明本身中执行这些库代码
我的想法是使用它,它是从一开始就考虑到反应的。另一方面,react anime只是anime.js的包装,它将其塑造成react的生命周期。在react组件上使用anime.js时,您需要确保以DOM元素为目标,而不是虚拟DOM元素。这里有一个例子。它有点旧,但是afaik没有一个代码/逻辑被弃用,并且可以使用
useffect
hook轻松地转换为功能组件
从“React”导入React;
从“react dom”导入react dom;
从'react Transition group'导入{TransitionGroup,Transition};
从“动画”中导入动画;
导入“/style.scss”;
类ListItem扩展了React.Component{
构造函数(){
超级();
//创建LIDOM引用
this.liRef=React.createRef();
}
componentDidUpdate(){
this.animeRef=动画({
目标:this.liRef.current,
translateX:()=>{
如果(this.props.status=='entering'){
回报率['-100%,'0%'];
}else if(this.props.status==“退出”){
回报率['0%,'100%'];
}
},
弹性:()=>{
如果(this.props.status=='entering'){
返回300;
}else if(this.props.status==“退出”){
返回0;
}
},
持续时间:500
});
}
render(){
返回(
嘿,我是项目编号{this.props.num}
);
}
}
类应用程序扩展了React.Component{
构造函数(){
超级();
此.state={
数据:[1,2,3]
};
}
添加(){
这是我的国家({
…这个州,
数据:this.state.data.concat([this.state.data.length+1])
});
}
删除(){
这是我的国家({
…这个州,
数据:this.state.data.slice(0,-1)
});
}
render(){
返回(
加一
移除一个
{
this.state.data.map(num=>(
{
(状态)=>{
返回;
}
}
) )
}
);
}
}
如果您想了解更多有关此问题的信息,请参阅ReactDOM.render(文章)
在React组件上使用anime.js时,如果您只想插入一个codesandbox,您需要确保以DOM元素为目标,而不是虚拟DOM元素。下面是一个示例。它有点旧,但似乎没有一个代码/逻辑被弃用,并且可以使用Useeffic轻松地转换为功能组件t
hook
从“React”导入React;
从“react dom”导入react dom;
从'react Transition group'导入{TransitionGroup,Transition};
从“动画”中导入动画;
导入“/style.scss”;
类ListItem扩展了React.Component{
构造函数(){
超级();
//创建LIDOM引用
this.liRef=React.createRef();
}
componentDidUpdate(){
this.animeRef=动画({
目标:this.liRef.current,
translateX:()=>{
如果(this.props.status=='entering'){
回报率['-100%,'0%'];
}else if(this.props.status==“退出”){
回报率['0%,'100%'];
}
},
弹性:()=>{
如果(this.props.status=='entering'){
返回300;
}else if(this.props.status==“退出”){
返回0;
}
},
持续时间:500
});
}
render(){
返回(
嘿,我是项目编号{this.props.num}
);
}
}
类应用程序扩展了React.Component{
构造函数(){
超级();
此.state={
数据:[1,2,3]