Reactjs React本机函数未按预期方式工作
以下是我的功能:Reactjs React本机函数未按预期方式工作,reactjs,react-native,Reactjs,React Native,以下是我的功能: setActive = (item) => { this.setState({ active: !item.active }); item.active = !item.active; console.log("Before update: ", !item.active); }; 以下是我如何使用它: import React, { Component } from "react"; imp
setActive = (item) => {
this.setState({ active: !item.active });
item.active = !item.active;
console.log("Before update: ", !item.active);
};
以下是我如何使用它:
import React, { Component } from "react";
import { Text, View, Image, TouchableOpacity } from "react-native";
import { styles } from "./styles";
import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import { getAccounts } from "../../redux/user/selectors";
const UserMenuAccount = ({ active, account, balance }) => (
<View style={styles.accountContainer}>
<Image
source={require("../../../assets/Usermenu/check.png")}
style={[styles.icon, { opacity: active ? 1 : 0 }]}
/>
<Text style={styles.text}>{account}</Text>
<Text style={[styles.text, { opacity: 0.5 }]}>{balance} ETH</Text>
</View>
);
class UserMenuAccounts extends Component {
state = {
active: false,
usersList:[]
};
setActive = (item) => {
this.setState({ active: !item.active });
item.active = !item.active;
console.log("Before update: ", !item.active);
};
render() {
const { GetAccounts } = this.props;
return (
<View>
<Text style={{ opacity: 0.5, fontSize: 16, fontWeight: "bold" }}>
Click to switch
</Text>
<View>
{GetAccounts.map((users, index, active) => {
return (
<TouchableOpacity
onPress={() => {
this.setActive(index, users, active);
this.disableActive(users);
}}
key={index}
>
<UserMenuAccount
account={`${users.username}`}
balance={0}
active={users.active}
key={index}
/>
</TouchableOpacity>
);
})}
</View>
</View>
);
}
}
const mapStateToProps = createStructuredSelector({
GetAccounts: getAccounts,
});
export default connect(mapStateToProps, null)(UserMenuAccounts);
我只想做的是,当点击按钮时,活动对象的属性变为真,但问题是当我按下第二个按钮时,它变为真,第一个项目的活动值没有变为false请就如何实现这一点提供任何建议???但为什么在点击第二个项目后第一个项目会变为false?您的代码不起作用我的意思是,在您的代码中,您没有添加任何行来更改第一个项目SetActive函数更改您点击的唯一项目如果您的组件已连接到全局存储,则只需正确更改数据。为此,您需要更改存储数据,在它们更新后,您的页面将重新提交。要更改存储,您需要发送一个操作。在这之后,您需要在reducer函数中更改存储,并且在reducer中,您可以操作您想要更改的所有数据,因此您根本不需要本地组件状态
---- Array [
Object {
"active": false,
"username": "Nikolozi",
},
Object {
"active": false,
"username": "ghg",
},
]