![](/img/trans.png)
[英]How to update array of objects in react native useState inside for loop?
[英]React useState() - how to update objects
我似乎無法使用 useState() 更新我的 state,每當我的警報顯示時,我總是看到我的 state 顯示其初始值。
下面的示例代碼,我的期望是當我單擊“保存”按鈕時, setData
將使用表單中的新值更新data
,然后顯示帶有警報的data
內容。 但是,發生的情況是,每當我單擊保存時, alert
總是顯示我的初始值。
如何使用我的字段值更新data
,以便我的alert
可以獲取更改?
const initialValues = {
title: "",
description: ""
}
const CreateForm = (props) => {
const [data, setData] = useState(initialValues);
const handleSave = (values) => {
setData({
title: values.title,
description: values.description
});
setTimeout(() => {
alert(JSON.stringify(data, null, 2));
}, 3000)
}
return (
<div>
<Formik initialValues={data}
validationSchema={validationSchema}
onSubmit={(values) => {
setTimeout(() => {
alert(JSON.stringify(values, null, 2));
}, 3000)
}}
>
{props => (
<Form>
<TextField name="title" type="input" label="Title" />
<TextField name="description" type="input" label="description" />
<div >
<Button type="submit" variant="contained" color="primary">Submit</Button>
<Button variant="contained" color="secondary" onClick={() => handleSave(props.values)}>Save</Button>
</div>
</Form>
)}
</Formik>
</div>
)
}
export default CreateForm
您可以使用“useEffect”鈎子,它的作用基本上是查看我們作為源傳遞給useEffect的數據是否有任何變化,如果有變化,它將觸發傳遞給它的function,在那里你可以提醒數據,就像您在 function “handleSave”中的代碼一樣,我們正在為數據分配新值,這最終將觸發 useEffect。
useEffect(() => {
//logic for the alert
alert(JSON.stringify(data, null, 2));
},[data]);
假設values
也沒有更新,請嘗試切換到 Formik 的Field
object 而不是 TextField。
<Form>
<Field name="title" type="input" label="Title" />
<Field name="description" type="input" label="description" />
<div >
<Button type="submit" variant="contained" color="primary">Submit</Button>
<Button variant="contained" color="secondary" onClick={() => handleSave(props.values)}>Save</Button>
</div>
</Form>
如果 TextField 是第三方控件,那么您可能需要像這樣更新代碼:
<Field name="title" type="input" label="Title" component={TextField}/>
您有時需要將 map 的所有 formik 功能返回到第三方庫的綁定庫。 就像您可以使用 formik-material-ui 為 Material-UI 提供綁定一樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.