javascript 从后端设置默认值

bfhwhh0e  于 2023-05-16  发布在  Java
关注(0)|答案(1)|浏览(112)

我创建了radio,并从useState(gender)设置了defaultValue。问题是这个选项在请求之前设置了defaultValue,所以它不能正确工作。我想我可以使用价值 prop ,但我不知道如何使用。

<Controller
                  control={control}
                  name="gender"
                  defaultValue="1"
                  render={({ field }) => (
                    <FormControl>
                      <FormLabel id="demo-radio-buttons-group-label">
                        Gender
                      </FormLabel>

                      <RadioGroup
                        aria-labelledby="demo-radio-buttons-group-label"
                        value={field.value}
                        onChange={(value) => {
                          field.onChange(value);
                        }}
                        name="radio-buttons-group"
                      >
                        <FormControlLabel
                          value={gender}
                          control={<Radio />}
                          label="Female"
                        />
                        <FormControlLabel
                          value="2"
                          control={<Radio />}
                          label="Male"
                        />
                      </RadioGroup>
                    </FormControl>
                  )}
                />

如何从后端设置默认值?

cqoc49vn

cqoc49vn1#

每次设置状态或更改 prop 时,组件都会重新呈现。在你的特殊情况下,你需要在渲染前装载状态
代码会像这样:

const [defaultData,setDeafultData] = useState({})
const [loading, setLoading] = useState(true)

 
useEffect(()=> {
fetch(serverUrl).then((r)=>{
     setDefault(r)
    })
   .catch(e=>console.log(e))
   .finally(()=>{
    setLoading(false)
   })    

     }, [])

if (loading) {
return <p>loading...</p>
}

return ( <Controller
              control={control}
              name="gender"
              defaultValue="1"
              render={....}
            /> )

当抓取完成时,加载状态将改变,它将重新呈现一个组件,而不是返回<p>Loading...</p>,它将返回您的<Controller/>

**重要:**如果你在react中有加载状态,它应该总是以true值开始。如果你以false开始,你将有问题和unesarry重新呈现。我看到人们这样做。

相关问题