reactjs - react如何改变react数组中对象的值
问题描述
开发环境
・反应
・打字稿
state 更新状态数组中的成员对象。
我的实现如下。但是,我收到以下错误并且无法很好地实现它。
错误信息
类型'(IMemberLavel | {Language: IMember;}) []'不能分配给类型'IMemberLavel []'
interface IMemberLevel {
member: IMember;
level: ILevel;
}
interface IMember {
id: number;
name: string;
}
interface ILevel {
id: number;
name: string;
}
interface ISearch {
name: string;
age: number;
groups?: IGroups[];
memberLavel: IMemberLevel[];
}
interface IState {
searchState: ISearch;
text: string,
display: boolean
}
const Index: FC = () => {
const [state, setState] = useState<IState>({
searchState: initialSearch,
text: '',
display: boolean
});
const onClickMember = (member: IMember) => {
setState({
...state,
searchState: {
...state.searchState,
memberLavel: [...state.searchState., { member : member }],
},
});
};
后记
const inithialMemberLavel: IMemberLevel = {
member: { id: 0, name: '' },
level: { id: 0, name: '' },
};
const initialSearch: ISearch = {
name: '',
age: 0,
groups: [],
memberLavel: inithialMemberLavel[]
}
解决方案
您要添加的新成员memberLavel
缺少level
属性,请添加该属性
setState({
...state,
searchState: {
...state.searchState,
memberLavel: [
...state.searchState.memberLavel,
{ member, level: { id: /* some number */, name: /* some name */ } },
],
},
});
IMemberLevel
或在界面中将其设置为可选
interface IMemberLevel {
member: IMember;
level?: ILevel;
}
推荐阅读
- python - Python - 如何删除不平衡的括号和引号
- r - 比较点模式,每个模式都有不同的窗口
- python - “源字符换行符”是什么意思?
- c++ - 纹理图像未正确映射
- mysql - Laravel Eloquent 模型按局部列和关系模型列值排序
- java - hibernate为不带括号的数组生成代码
- mysql - Mysql 基于行的二进制日志记录在某些版本的 mysql 中表现不同(行分组)
- scala - Flink-1.4.2 出现错误:对象 contrib 不是包 org.apache.flink 的成员
- c - 嵌入式应用程序中的最佳任务调度策略
- python - 变量赋值中“and”的用例