简体   繁体   English

如何使用 useEffect 挂钩中设置的另一个 state 的值设置 useState 的初始值?

[英]How to set the initial value of useState with the value of another state set in a useEffect hook?

This question sounds complicated but what I am trying to do is这个问题听起来很复杂,但我想做的是

  1. I get user data from firestore in a useEffect hook and then put the data in a state.我在 useEffect 挂钩中从 firestore 获取用户数据,然后将数据放入 state 中。 This part works fine.这部分工作正常。
const [profile, setProfile] = useState("")

useEffect(() => {
// Get user profile data from firestore.. 
    setProfile(userData) 
}, [])
  1. I have html radio inputs where user can change their gender but I need to set the initial gender (one they choose during sign-up) with a state我有 html 无线电输入,用户可以在其中更改性别,但我需要使用 state 设置初始性别(他们在注册期间选择的性别)
const defaultGender = profile.gender
const [gender, setGender] = useState(defaultGender)

<input onChange={e => setGender(e.target.value)} type="radio" id="Man" name="gender" value="Man" checked={defaultGender === "Man"} /> <label htmlFor="Man">Man</label>

<input onChange={e => setGender(e.target.value)} type="radio" id="Woman" name="gender" value="Woman" checked={defaultGender === "Woman"} /> 
<label htmlFor="Woman">Woman</label>

The problem is, with this code, console.log(gender) returns undefined and I can not check (select) a different gender as it is stuck on Man.问题是,使用此代码, console.log(gender)返回undefined ,我无法检查(选择)不同的性别,因为它卡在 Man 上。

Please advice请指教

Seems like you just need to use gender from the state (not defaultGender ) for the checked input's prop:似乎您只需要使用 state 中的gender (不是defaultGender )作为checked输入的道具:

const [gender, setGender] = useState(profile.gender)

<input onChange={e=> setGender(e.target.value)} type="radio" id="Man" name="gender" value="Man" checked={gender === "Man"} />
<label htmlFor="Man">Man</label>
<input onChange={e=> setGender(e.target.value)} type="radio" id="Woman" name="gender" value="Woman" checked={gender === "Woman"} />
<label htmlFor="Woman">Woman</label>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM