可以通过以下步骤实现:
function reducer(state, action) {
switch (action.type) {
case 'ADD_PROPERTY':
return state.map(obj => ({
...obj,
newProperty: action.value
}));
default:
return state;
}
}
import React, { useReducer } from 'react';
function MyComponent() {
const initialState = [
{ id: 1, name: 'Object 1' },
{ id: 2, name: 'Object 2' },
{ id: 3, name: 'Object 3' }
];
const [state, dispatch] = useReducer(reducer, initialState);
// 添加属性的函数
const addProperty = (value) => {
dispatch({ type: 'ADD_PROPERTY', value });
};
return (
<div>
{state.map(obj => (
<div key={obj.id}>
<span>{obj.name}</span>
<span>{obj.newProperty}</span>
</div>
))}
<button onClick={() => addProperty('New Value')}>Add Property</button>
</div>
);
}
在上述代码中,我们创建了一个初始状态数组initialState,并将其作为useReducer的第二个参数传递给reducer函数。然后,我们使用解构赋值语法将状态和dispatch函数分别赋值给state和dispatch变量。
在组件中,我们渲染状态数组中的每个对象,并显示其名称和新属性。通过点击按钮,我们调用addProperty函数,并传递一个值作为新属性的值。addProperty函数会触发dispatch函数,将一个包含type和value属性的action对象传递给reducer函数。
reducer函数根据action的类型为每个对象创建一个新的状态对象,并在新对象中添加新属性。最后,组件会重新渲染,并显示更新后的状态数组。
推荐的腾讯云相关产品:腾讯云云服务器(CVM)和腾讯云函数(SCF)。
领取专属 10元无门槛券
手把手带您无忧上云