我的应用程序中有5个按钮[“运行”,“骑行”,“阅读”,“编码”,“纽尔”],当我单击它时,该按钮会更改其颜色并在屏幕上显示标题。我正在使用这个库:react- native-selectmultiple-button。
假设我单击了“正在运行”和“骑行”按钮,这些按钮将突出显示,并且文本将显示在屏幕上,但是当我将屏幕切换到另一页并返回到先前的屏幕时,按钮状态被设置为默认状态。
下面是我的代码:
const multipleData = ["running", "riding", "reading", "coding", "Niuer"]; export default class SimpleButton extends Component { constructor(props) { super(props); this.state = { multipleSelectedDataLimited: [] }; } render() { return ( <View style={{paddingTop:200}}> <Text style={styles.welcome}> implement the multiple-select buttons demo by SelectMultipleButton </Text> <Text style={{ color: 'blue', marginLeft: 10 }}> I like {_.join(this.state.multipleSelectedDataLimited, ", ")} </Text> <View style={{ flexWrap: "wrap", flexDirection: "row", justifyContent: "center" }} > {multipleData.map(interest => ( <SelectMultipleButton key={interest} buttonViewStyle={{ borderRadius: 10, height: 40 }} textStyle={{ fontSize: 15 }} highLightStyle={{ borderColor: "gray", backgroundColor: "transparent", textColor: "gray", borderTintColor: 'blue', backgroundTintColor: 'blue', textTintColor: "white" }} value={interest} selected={this.state.multipleSelectedDataLimited.includes( interest )} singleTap={valueTap => this._singleTapMultipleSelectedButtons_limited(interest) } /> ))} </View> </View> ); } _singleTapMultipleSelectedButtons_limited(interest) { if (this.state.multipleSelectedDataLimited.includes(interest)) { _.remove(this.state.multipleSelectedDataLimited, ele => { return ele === interest; }); } else { if (this.state.multipleSelectedDataLimited.length < 3) this.state.multipleSelectedDataLimited.push(interest); } this.setState({ multipleSelectedDataLimited: this.state.multipleSelectedDataLimited }); } } const styles = StyleSheet.create({ welcome: { margin: 10, marginTop: 30, color: "gray" } });
有没有办法即使在更改屏幕后也可以保持按钮的状态?
任何建议或意见,将不胜感激。提前致谢!
有许多方法,你可以做到这一点- 一个简单的方法可能是使用的AyncStorageAPI,以保存按钮的状态,以便它可以返回此屏幕可以恢复。
AyncStorage
因此,您可以通过以下方式使用它:
import { AsyncStorage } from "react-native"
然后_singleTapMultipleSelectedButtons_limited(interest)可以在函数末尾添加以下内容:
_singleTapMultipleSelectedButtons_limited(interest)
AsyncStorage.setItem('button_state', JSON.stringify(this.state.multipleSelectedDataLimited));
最后,您可以将此方法添加到组件中,以从持久化的任何数据中初始化按钮状态:
componentDidMount() { try { // Fetch data from store if it exists AsyncStorage.getItem('button_state').then(data => { // If data present, try and parse it and restore button state from it if(data) { const multipleSelectedDataLimited = JSON.parse(data); this.setState({ multipleSelectedDataLimited }) } }); } catch(err){ console.log('Failed to load button state') } }
希望这可以帮助!