React Hooks - 将状态设置为初始状态
React Hooks - set state to initial state
我正在使用 React useState 在状态中创建对象。
API 调用成功后,这将更新为数据对象。
我有一个可以改变这种状态的表单,但我也有一个取消按钮。
单击取消时,如何将此状态恢复到其初始值(在 API 调用之后)?
我应该创建另一个状态变量并在那里存储初始状态,然后根据它更新我的状态吗?
const [basePosition, setBasePosition] = useState({});
const [position, setPosition] = useState({
id: '',
title: '',
description: '',
authoredBy: '',
createdDate: '',
lastUpdatedBy: '',
lastUpdateDate: '',
sliderResponses: [],
tileResponses: [{}],
template: {}
});```
const initialState = {
id: '',
title: '',
};
const Test = () => {
const [position, setPosition] = useState(initialState);
return <>
...form
<button onClick={() => setPosition(initialState)}>Reset</button>
</>;
};
不要创建另一个状态变量来存储初始状态,因为它会导致另一个重新渲染,而不是当你的组件被安装然后初始化你的初始状态对象时:
let initialState = null;
React.useEffect(() => {
initialState = position;
},[])
当您想重置为初始状态时,只需使用:
setPosition(initialState);
您不需要创建另一个 状态。只需声明一个不会改变的初始状态,并在需要重置时将其分配给 Position 状态。例如:
import React,{useState} from 'react'
const YourComponent = () =>{
const initialState = {
id: '',
title: '',
description: '',
authoredBy: '',
createdDate: '',
lastUpdatedBy: '',
lastUpdateDate: '',
sliderResponses: [],
tileResponses: [{}],
template: {}
}
const [basePosition, setBasePosition] = useState({});
const [position, setPosition] = useState(initialState);
const resetState = () =>{
setPosition(initialState)
}
}
你的问题是否应该存储初始值的答案是是。
这将是维护代码的最简单方法。所以把你的初始值放在一个常量中:
const INITIAL_VALUES = {
id: '',
title: '',
description: '',
authoredBy: '',
createdDate: '',
lastUpdatedBy: '',
lastUpdateDate: '',
sliderResponses: [],
tileResponses: [{}],
template: {}
}
每次你想使用那个初始对象时,只需传播它就可以了(传播以丢失对常量的引用):
const [basePosition, setBasePosition] = useState({});
const [position, setPosition] = useState({...INITIAL_VALUES});
稍后当您重置时:
setPosition({...INITIAL_VALUES})
import React, { useState } from 'react'
// counter
function Example3() {
const [initial, setIncrement] = useState(0)
const increment = () => {
setIncrement(initial + 1)
}
const dincrement = () => {
setIncrement(initial - 1)
}
const reset = () => {
setIncrement(0)
}
return (
<div>
<p>{initial}</p>
<button onClick={increment} >+</button>
<button onClick={dincrement} >-</button>
<button onClick={reset}>reset</button>
</div>
)
}
export default Example3;
我正在使用 React useState 在状态中创建对象。 API 调用成功后,这将更新为数据对象。
我有一个可以改变这种状态的表单,但我也有一个取消按钮。 单击取消时,如何将此状态恢复到其初始值(在 API 调用之后)?
我应该创建另一个状态变量并在那里存储初始状态,然后根据它更新我的状态吗?
const [basePosition, setBasePosition] = useState({});
const [position, setPosition] = useState({
id: '',
title: '',
description: '',
authoredBy: '',
createdDate: '',
lastUpdatedBy: '',
lastUpdateDate: '',
sliderResponses: [],
tileResponses: [{}],
template: {}
});```
const initialState = {
id: '',
title: '',
};
const Test = () => {
const [position, setPosition] = useState(initialState);
return <>
...form
<button onClick={() => setPosition(initialState)}>Reset</button>
</>;
};
不要创建另一个状态变量来存储初始状态,因为它会导致另一个重新渲染,而不是当你的组件被安装然后初始化你的初始状态对象时:
let initialState = null;
React.useEffect(() => {
initialState = position;
},[])
当您想重置为初始状态时,只需使用:
setPosition(initialState);
您不需要创建另一个 状态。只需声明一个不会改变的初始状态,并在需要重置时将其分配给 Position 状态。例如:
import React,{useState} from 'react'
const YourComponent = () =>{
const initialState = {
id: '',
title: '',
description: '',
authoredBy: '',
createdDate: '',
lastUpdatedBy: '',
lastUpdateDate: '',
sliderResponses: [],
tileResponses: [{}],
template: {}
}
const [basePosition, setBasePosition] = useState({});
const [position, setPosition] = useState(initialState);
const resetState = () =>{
setPosition(initialState)
}
}
你的问题是否应该存储初始值的答案是是。
这将是维护代码的最简单方法。所以把你的初始值放在一个常量中:
const INITIAL_VALUES = {
id: '',
title: '',
description: '',
authoredBy: '',
createdDate: '',
lastUpdatedBy: '',
lastUpdateDate: '',
sliderResponses: [],
tileResponses: [{}],
template: {}
}
每次你想使用那个初始对象时,只需传播它就可以了(传播以丢失对常量的引用):
const [basePosition, setBasePosition] = useState({});
const [position, setPosition] = useState({...INITIAL_VALUES});
稍后当您重置时:
setPosition({...INITIAL_VALUES})
import React, { useState } from 'react'
// counter
function Example3() {
const [initial, setIncrement] = useState(0)
const increment = () => {
setIncrement(initial + 1)
}
const dincrement = () => {
setIncrement(initial - 1)
}
const reset = () => {
setIncrement(0)
}
return (
<div>
<p>{initial}</p>
<button onClick={increment} >+</button>
<button onClick={dincrement} >-</button>
<button onClick={reset}>reset</button>
</div>
)
}
export default Example3;