【问题标题】:react How to change the value of object in react arrayreact如何改变react数组中对象的值
【发布时间】:2020-10-14 13:03:44
【问题描述】:

开发环境
・ 反应
・ 打字稿

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[]
}

【问题讨论】:

  • 这有一些语法错误。你能修好它们吗?
  • 我修复了上面的代码。

标签: reactjs typescript


【解决方案1】:

您要添加到 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;
}

【讨论】:

  • 谢谢!!!我以上述方式实现了它。但是初始值设置为[],无法详细设置。
  • 我将初始值设置为 memberLavel: inithialMemberLavel [],但报错 Parsing error: An element access expression should take an argument.eslint。
  • @TOYUU 你只是把[] 弄错了,这样你就可以用一个数组初始化它memberLavel: [inithialMemberLavel]
  • 谢谢!! {member, level: {id: /* some number * /, name: /* some name * /}}, member 在缩写属性'member'的范围内没有值。声明一个值或指定一个初始化器。我收到一个 ts (18004) 错误
  • 尝试回退{member: member}
猜你喜欢
  • 2023-01-09
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多