reactjs - 如何在单击按钮时动态呈现元素
问题描述
“我想在单击按钮时呈现动画。但单击它时不会呈现。您可以从https://lottiefiles.com获取动画。或者我在下面分享了它,只需复制粘贴即可”。此外,动画应该在前一个视图上呈现。
代码:
import React, {Component} from 'react';
import {Button,Text,Platform, StyleSheet, View} from 'react-native';
import LottieView from 'lottie-react-native';
export default class App extends Component<Props> {
constructor() {
super();
this.state = {
flag:false,
x: ''
}
this.fun = this.fun.bind(this);
}
fun(){
return React.createElement(LottieView, {
style: {
flex: 1
},
source: require('./animation.json'),
autoPlay:true,
loop: true,
});
}
render(){
this.x=this.fun()
return(
<View style={{flex: 1}}>
<Button
title="Reject"
color="#FF0000"
onPress ={()=>this.setState({flag:true})}
/>
{this.flag?<View style={{flex: 1}}>{this.x}</View>:<Text>hello</Text>}
</View>
);
}
}
这是动画 json 文件
{"v":"4.10.1","fr":48,"ip":0,"op":48,"w":56,"h":56,"nm":"录入声纹 tick","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"对勾","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[28,28,0],"ix":2},"a":{"a":0,"k":[0.988,5.188,0],"ix":1},"s":{"a":0,"k":[66.824,66.824,100],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-13.398,3.94],[-1.702,13.989],[20.038,-8.302]],"c":false},"ix":2},"nm":"路径 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":6,"ix":5},"lc":1,"lj":1,"ml":4,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"形状 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tm","s":{"a":0,"k":0,"ix":1},"e":{"a":1,"k":[{"i":{"x":[0.446],"y":[1]},"o":{"x":[0.078],"y":[0.582]},"n":["0p446_1_0p078_0p582"],"t":19,"s":[0],"e":[86]},{"t":31}],"ix":2},"o":{"a":1,"k":[{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":21,"s":[0],"e":[60]},{"i":{"x":[0.667],"y":[1]},"o":{"x":[0.333],"y":[0]},"n":["0p667_1_0p333_0"],"t":26,"s":[60],"e":[0]},{"t":31}],"ix":3},"m":1,"ix":2,"nm":"修剪路径 1","mn":"ADBE Vector Filter - Trim","hd":false}],"ip":12,"op":468,"st":-12,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":"形状图层 1","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[28,28,0],"ix":2},"a":{"a":0,"k":[-0.121,0.371,0],"ix":1},"s":{"a":1,"k":[{"i":{"x":[0.667,0.667,0.667],"y":[1,1,1]},"o":{"x":[0.706,0.706,0.333],"y":[0.004,0.004,0]},"n":["0p667_1_0p706_0p004","0p667_1_0p706_0p004","0p667_1_0p333_0"],"t":0,"s":[0,0,100],"e":[111.445,111.445,100]},{"i":{"x":[0.105,0.105,0.667],"y":[0.984,0.984,1]},"o":{"x":[0.333,0.333,0.333],"y":[0,0,0]},"n":["0p105_0p984_0p333_0","0p105_0p984_0p333_0","0p667_1_0p333_0"],"t":12,"s":[111.445,111.445,100],"e":[100,100,100]},{"t":19}],"ix":6}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[48.469,48.469],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"椭圆路径 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"fl","c":{"a":0,"k":[0.462745098039,0.443137254902,0.737254901961,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-0.121,0.371],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"椭圆 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":144,"st":0,"bm":0}]}
解决方案
您需要更改变量检查:
render() {
this.x = this.fun();
return(
<View style={{flex: 1}}>
<Button
title="Reject"
color="#FF0000"
onPress={() => this.setState({flag:true})}
/>
{this.state.flag ?
<View style={{flex: 1}}>{this.x}</View> :
<Text>hello</Text>
}
</View>
);
}
没有“this.flag”,因此您需要将其更改为 this.state.flag - 然后代码应该可以工作。我会说将 onPress 更改为 onClick,但我知道 onPress 是本机反应 - 您是否需要使用 TouchableOpacity、TouchableHighlight、TouchableNativeFeedback 而不是 Button?
您还需要添加一些代码来考虑多次印刷。例如,如果有人在动画期间再次按下按钮,您不希望它重新开始。
推荐阅读
- javascript - 相扑选择刷新问题
- javascript - 如何将导航菜单与搜索栏和下拉选项卡对齐?
- html - 发生未处理的异常:端口 4200 已在使用中。使用“--port”指定不同的端口
- javascript - 如何通过同时执行两个异步函数接收到响应值后执行函数
- laravel - Laravel 关系给了我“?” 而不是电子邮件
- python - 从操作系统命令行调用路径上的 .py 文件
- javascript - 如何在 HTML/CSS 中添加特定于设备的变量?
- python-3.x - 为什么在我的 Docker 映像上安装 python-psycopg2 不能防止随后出现“没有名为 'psycopg2' 的模块”错误?
- python - 查找具有连续但奇数日期的百分比差异和差异
- javascript - 如何在 MongoDB 中插入带有子文档的文档