react-native - 如何通过样式更改处理按下和取消按下的可触摸组件?
问题描述
想法是创建一个特定的 Touchable 组件,其作用类似于按钮,并具有按下和未按下的感觉,并在我的应用程序上多次使用该组件,但一次只能按下一个。如果一个被触摸,然后另一个被触摸,第一个应该不被按下,第二个应该被按下。这个想法不是使用 Redux 来解决这个问题。
我已经在处理按下了哪个组件,并通过 props 将操作发送到组件。但我不知道如何以通用方式同时管理所有按钮,我的意思是,不是为每个按钮创建一个变量。
我的应用程序:
<View>
<ActivityButton activityTitle={"B1"} submit={() => this.submitHandler("B1")} />
<ActivityButton activityTitle={"B2"} submit={() => this.submitHandler("B2")} />
</View>
我的组件(ActivityButton):
this.state={active:false}
<TouchableOpacity style={this.state.active ? styles.buttonPress : styles.button} onPress={this.props.submit}>
<View>
<Text>{this.props.activityTitle}</Text>
</View>
</TouchableOpacity>
解决方案
我假设您尝试执行单选按钮组之类的操作?如果您的按钮仅位于单个页面中,您可以通过使用 state inMyApp
来检查启用了哪些按钮而不是按钮本身来实现。
我的应用
constructor(props) {
super(props);
this.state = {
buttonIdThatEnable: "",
};
}
submitHandler = (buttonId) => {
this.setState({
buttonIdThatEnable: buttonId,
});
}
render() {
return (
<View>
<ActivityButton
activityTitle={"B1"}
active={this.state.buttonIdThatEnable === "B1"}
submit={() => this.submitHandler("B1")}
/>
<ActivityButton
activityTitle={"B2"}
active={this.state.buttonIdThatEnable === "B2"}
submit={() => this.submitHandler("B2")}
/>
</View>
)
}
ActivityButton(使用 props.active 确定样式)
<TouchableOpacity style={this.props.active ? styles.buttonPress : styles.button}
onPress={this.props.submit}>
<View>
<Text>{this.props.activityTitle}</Text>
</View>
</TouchableOpacity>
如果你的 Buttons 位于不同的组件中并且你不想使用 Redux,你可以考虑React Context API
推荐阅读
- java - 如何在 Java 中垂直对齐扫描仪输入?
- attributeerror - openmms教程python3.7.9 laspy错误
- javascript - 将超时存储为函数的属性是否有任何问题?
- ios - 应用程序在调试模式(iOS)下崩溃,但在试飞和安卓中运行良好
- c++ - 为什么这个 BFS 队列大小这么大?
- python - DataError:没有要聚合的数字类型
- nginx - 为什么 Nginx 和 Jetty 之间的动态 proxy_pass 会导致重定向?
- python - Asyncio.create_task() 和 asyncio.gather() 依次运行
- string - Mad Lib 生成器,字符串对齐
- javascript - d3.js - 截断指定节点 d.type 的节点文本