【问题标题】:Parse response into a model object in React在 React 中将响应解析为模型对象
【发布时间】:2020-04-24 05:24:05
【问题描述】:

如果我像这样对某个服务器进行 REST 调用:

    componentDidMount() {
        axios.get<PersonEntry>(`somehost/personentry`)
          .then(res => {
            // Can I slice res.data into result ? 
            const result : PersonEntry = res.data; 
            this.setState(result)
          })
      }

假设我有一个 PersonEntry 模型对象:

 export class PersonEntry {
    name: string = '';
    address: string = ''; 
    PersonEntry(){} 
}

如果响应包含很多我想忽略的字段,我如何将响应“切片”到这个对象中而不选择字段?现在我只需将响应中的所有字段都放入我的 PersonEntry 对象中

【问题讨论】:

    标签: reactjs typescript axios


    【解决方案1】:

    是的,您可以只映射需要的属性:

    const result = response.map(obj => ({name: obj.name, address: obj.address}));
    

    因此,在console.log(result) 中,您将只有您选择的参数。

    稍后:

    const final : PersonEntry = result; 
    

    有效吗?

    【讨论】:

    • 否,response.map(obj => ({name: obj.name, address: obj.address})) 给出“属性映射不存在于类型 'AxiosResponse'”
    • 我也想知道是否可以在不挑选字段的情况下切入 PersonEntry 对象,并在匹配时使任何字段匹配。
    • 你能提供我所有的代码吗?我试着在我的机器上复制它。
    • 因为 res.data 是 PersonEntry 响应对象,而不是数组,所以我正在使用这样的转换(转换完成所有映射): componentDidMount() { axios.get(host/someResource ) .then(res => { let entry : PersonEntry = PersonEntryTransform.transform(res.data); this.setState(entry) }) } 那行得通。你怎么看?
    • 一个 PersonEntry 有一个构建器,PersonEntryTransform 获取接收到的对象并构建并返回一个 PersonEntry,就像这样,例如: if ('name' in response && response['name'] ! = null) { builder.name(response['name']);我不想使用“assign”,因为我想控制字段并在 React 中使用内部模型对象。你怎么看?
    猜你喜欢
    • 2013-09-19
    • 2018-10-10
    • 2018-10-18
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 2016-07-17
    相关资源
    最近更新 更多