11. React 使用 useState Hook 更新数组和对象
当状态更新时,它会被完全覆盖。如果我们的状态是具有多个属性的对象,但您只想更改某个属性的值怎么办?例如,我们初始化描述框的状态,如下所示:
-
const [box, setBox] = useState({
-
name: 'jiyik.com',
-
bgColor: 'blue', // background color
-
width: 400,
-
height: 300
-
});
如果您想更改背景颜色但保持其他内容不变
setBox({...box, bgColor: 'red'});
不要使用此代码:因为它会从状态中删除名称、宽度和高度。
setBox({bgColor: 'red'})
完整的小案例
我们要制作的演示展示了一个盒子和几个表单元素。您可以使用相应的输入/选择元素来更新框的名称、背景颜色、宽度或高度。
-
import { useState } from 'react';
-
import './App.css';
-
-
function App() {
-
-
// 使用具有四个属性的对象初始化状态
-
const [box, setBox] = useState({
-
name: 'jiyik.com',
-
bgColor: 'blue',
-
width: 400,
-
height: 100,
-
});
-
-
// 此函数将更新用户在名称字段中键入时将调用的框的名称
-
const updateBoxName = (e) => {
-
setBox({ ...box, name: e.target.value });
-
};
-
-
// 此函数将更新框的背景颜色,当用户更改选择元素时将调用它
-
const updateBakcgroundColor = (e) => {
-
setBox({ ...box, bgColor: e.target.value });
-
};
-
-
// 此函数将更新当用户更改宽度输入时将调用的框的宽度
-
const updateBoxWidth = (e) => {
-
setBox({ ...box, width: parseInt(e.target.value) });
-
};
-
-
// 此函数将更新当用户更改高度输入时将调用的框的高度
-
const updateBoxHeight = (e) => {
-
setBox({ ...box, height: parseInt(e.target.value) });
-
};
-
-
-
return (
-
<div style={{ padding: 30 }}>
-
{/* 这是盒子 */}
-
<div
-
style={{
-
width: box.width,
-
height: box.height,
-
background: box.bgColor,
-
display: 'flex',
-
justifyContent: 'center',
-
alignItems: 'center',
-
}}
-
>
-
<h1 style={{ color: '#fff' }}>{box.name}</h1>
-
</div>
-
-
{/* 这是更改框的表单元素 */}
-
<div
-
style={{
-
marginTop: 30,
-
width: 400,
-
display: 'flex',
-
flexDirection: 'column',
-
}}
-
>
-
<h3>Change the Apparence of the Box:</h3>
-
<p>Box Name:</p>
-
<input type='text' value={box.name} onChange={updateBoxName} />
-
-
<p>Background Color:</p>
-
<select value={box.bgColor} onChange={updateBakcgroundColor}>
-
<option value='blue'>Blue</option>
-
<option value='red'>Red</option>
-
<option value='green'>Green</option>
-
<option value='orange'>Orange</option>
-
</select>
-
-
<p>Box Width:</p>
-
<input type='number' value={box.width} onChange={updateBoxWidth} />
-
-
<p>Box Height:</p>
-
<input type='number' value={box.height} onChange={updateBoxHeight} />
-
</div>
-
</div>
-
);
-
}
-
-
export default App;
-
}
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfifcik
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13