React native 根据动态值选择RadioButton
我有三个单选按钮,男,女,其他,我从服务器上获取数据 我想要的是,当this.state.genderType=='Male'时,应该自动选择Male单选按钮 当this.state.genderType==“女性”时,应选择女性单选按钮,依此类推。 以下是我的状态:React native 根据动态值选择RadioButton,react-native,React Native,我有三个单选按钮,男,女,其他,我从服务器上获取数据 我想要的是,当this.state.genderType=='Male'时,应该自动选择Male单选按钮 当this.state.genderType==“女性”时,应选择女性单选按钮,依此类推。 以下是我的状态: SetStatefunction = () =>{ const {retrievedata} = this.state retrievedata.map((item)=>{ th
SetStatefunction = () =>{
const {retrievedata} = this.state
retrievedata.map((item)=>{
this.setState({name: item.name})
this.setState({dob: item.dob})
this.setState({bloodgroup: item.bloodGroup})
this.setState({email: item.email})
this.setState({genderType: item.gender})
this.setState({phone: item.mobile})
this.setState({address: item.address})
console.log(this.state.genderType)
if(item.dob){
let dob = moment(item.dob).format("YYYY-MM-DD")
this.setState({dob: dob})
}
})
}
这是我单选按钮的代码
<RadioGroup
size={18}
thickness={2}
color="#58992c"
style={{ flexDirection: "row" }}
onSelect={(index, value) => {
this.setState({ genderType: value });
}}
>
<RadioButton
value={"Male"}
style={{ alignItems: "center"}}
name = "gender"
>
<Text style={{fontSize: 16}}>Male</Text>
</RadioButton>
<RadioButton
value={"Female"}
style={{ alignItems: "center" }}
name = "gender"
>
<Text style={{fontSize: 16}}>Female</Text>
</RadioButton>
<RadioButton
value={"Other"}
style={{ alignItems: "center" }}
name = "gender"
>
<Text style={{fontSize: 16}}>Other</Text>
</RadioButton>
</RadioGroup>
您可以将选中的属性添加到RadioButton
如果您在retrievedata中有数据,那么为什么要再次迭代它
您正在迭代retrievedata,每次迭代都调用多个setState,这是完全错误的
setState是异步的。您不应该在映射中调用setState,它只会创建冲突,并且您永远不会得到所需的输出
您可以直接使用retrievedata数组获取值
checked = {retrievedata[0].gender.toLowerCase() === "male"}
你能告诉我们全部代码吗?我们无法预测您正在从服务器接收哪些数据以及.data如何正确接收。数据代码中没有问题。数据处于道具或状态?感谢您的回复。但不起作用。但不是根据数据自动选择的。您能告诉我们您的数据具体在哪里吗?或者发布完整的组件,以便我们可以看到数据来自何处。我将数据保存在状态中。数据获取中没有问题。因为其他字段正在正确地动态更改,所以使用this.state.data.gender代替data.gender。考虑到数据是一个对象,我也在这样做。我以.state.genderType…..data.gender为例
SetStatefunction = () => {
const { retrievedata } = this.state
retrievedata.map((item) => {
this.setState({ name: item.name })
this.setState({ dob: item.dob })
this.setState({ bloodgroup: item.bloodGroup })
this.setState({ email: item.email })
this.setState({ genderType: item.gender })
this.setState({ phone: item.mobile })
this.setState({ address: item.address })
console.log(this.state.genderType)
if (item.dob) {
let dob = moment(item.dob).format("YYYY-MM-DD")
this.setState({ dob: dob })
}
})
}
checked = {retrievedata[0].gender.toLowerCase() === "male"}