如何保存旧状态值反应
How to save old state values react
我不想在更改功能组件中的一个时丢失我的其他状态。我知道如何在 class 组件中做到这一点,但你如何在功能中做到这一点? Class 组件 this.setState({...this.state, somestate: somestate});
我的功能组件现在看起来像这样:
const [product, setProduct] = useState({});
let { id } = useParams();
useEffect(() => {
let productFromLocalStorage = localStorage[id];
setProduct(JSON.parse(productFromLocalStorage));
}, [id]);
function handleName(event) {
setProduct({name: event.target.value});
// setName(event.target.value);
}
return (
<div style={styles.container}>
<h1 style={styles.title}>Product {product.name} Edit Page</h1>
<form style={styles.form} onSubmit={handleSave}>
<label style={styles.label}>
Name: <input value={product.name} type="text" onChange={handleName}></input>
</label>
<label style={styles.label}>
EAN: <input value={product.ean} type="text" onChange={handleEan}></input>
</label>
<label style={styles.label}>
Type: <input value={product.type} type="text" onChange={handleType}></input>
</label>
<label style={styles.label}>
Weight:{' '}
<input value={product.weight} type="text" onChange={handleWeight}></input>
</label>
<label style={styles.label}>
Color:{' '}
<input value={product.color} type="text" onChange={handleColor}></input>
</label>
<label style={styles.label}>
Active:{' '}
<input value={product.active} type="checkbox" onChange={handleActive}></input>
</label>
<input style={styles.submitButton} type="submit" value="SAVE"></input>
</form>
</div>
);
function handleSave(event) {
const productInfo = {
name: product.name,
ean: product.ean,
type: product.type,
weight: product.weight,
color: product.color,
active: product.active,
};
localStorage.setItem(id, JSON.stringify(productInfo));
alert('Product: ' + name + ' edited!');
}
我的产品状态有其他参数,如重量等...当我设置 setProduct({name: event.target.value});其他值变空。如何解决?
你正在做的是覆盖,所以就像你说的你需要保持当前值,所以这样做:
setProduct({...product, name: event.target.value})
您也可以通过 useState() 执行相同的操作,
const [product, setProduct] = useState({});
someHandler=(event)=>(
setProduct(product=>{
...product,
name:event.target.value
});
)
我不想在更改功能组件中的一个时丢失我的其他状态。我知道如何在 class 组件中做到这一点,但你如何在功能中做到这一点? Class 组件 this.setState({...this.state, somestate: somestate});
我的功能组件现在看起来像这样:
const [product, setProduct] = useState({});
let { id } = useParams();
useEffect(() => {
let productFromLocalStorage = localStorage[id];
setProduct(JSON.parse(productFromLocalStorage));
}, [id]);
function handleName(event) {
setProduct({name: event.target.value});
// setName(event.target.value);
}
return (
<div style={styles.container}>
<h1 style={styles.title}>Product {product.name} Edit Page</h1>
<form style={styles.form} onSubmit={handleSave}>
<label style={styles.label}>
Name: <input value={product.name} type="text" onChange={handleName}></input>
</label>
<label style={styles.label}>
EAN: <input value={product.ean} type="text" onChange={handleEan}></input>
</label>
<label style={styles.label}>
Type: <input value={product.type} type="text" onChange={handleType}></input>
</label>
<label style={styles.label}>
Weight:{' '}
<input value={product.weight} type="text" onChange={handleWeight}></input>
</label>
<label style={styles.label}>
Color:{' '}
<input value={product.color} type="text" onChange={handleColor}></input>
</label>
<label style={styles.label}>
Active:{' '}
<input value={product.active} type="checkbox" onChange={handleActive}></input>
</label>
<input style={styles.submitButton} type="submit" value="SAVE"></input>
</form>
</div>
);
function handleSave(event) {
const productInfo = {
name: product.name,
ean: product.ean,
type: product.type,
weight: product.weight,
color: product.color,
active: product.active,
};
localStorage.setItem(id, JSON.stringify(productInfo));
alert('Product: ' + name + ' edited!');
}
我的产品状态有其他参数,如重量等...当我设置 setProduct({name: event.target.value});其他值变空。如何解决?
你正在做的是覆盖,所以就像你说的你需要保持当前值,所以这样做:
setProduct({...product, name: event.target.value})
您也可以通过 useState() 执行相同的操作,
const [product, setProduct] = useState({});
someHandler=(event)=>(
setProduct(product=>{
...product,
name:event.target.value
});
)