【问题标题】:react mobx - store return Proxy objectreact mobx - 存储返回代理对象
【发布时间】:2020-09-26 18:09:27
【问题描述】:

我有以下状态类:

import { observable, action } from 'mobx';
import axios from 'axios';

export default class AppState {
  @observable user;
  @observable pToken;

  constructor() {
    this.user = {};
    this.pToken = localStorage.getItem('pToken');
  }

  async fetchData(query) {

    const body = JSON.stringify({ query, });
    const response = await axios.post('url', body, {
      headers: {
        'Content-Type': 'application/json',
        token: localStorage.getItem('pToken')
      }
    });

    const user = response.data.data.user;
    console.log('Got user', user);
    this.setUser(user);
  }

  @action setUser(user) {
    this.user = user;
  }
}

在我的组件中:

@inject('store')
@observer
export default class Header extends Component {
    constructor(props) {
        super(props);
        this.store = this.props.store.appState;
    }

    render() {
        const { user } = this.store;
        console.log('store', this.store);

        return (
            <header className='header'>
                User - {user.username}
            </header>
        );
    }
}

不幸的是,状态user 属性返回一个Proxy 对象,而user 日志显示的是用户对象。知道我错过了什么吗?

【问题讨论】:

    标签: javascript reactjs mobx mobx-react


    【解决方案1】:

    一切都按预期工作,MobX v5 依赖于底层代理,因此当您记录可观察对象时,它通常会显示一些内部实现。

    你可以使用 toJS MobX 方法console.log(toJS(user)) 或者直接解构用户对象console.log({ ...user })

    toJS 文档:https://mobx.js.org/refguide/tojson.html

    【讨论】:

    • 我不想使用toJS,每次我尝试访问商店中的对象时,我认为这是一项昂贵的操作
    • 你不需要用它来访问,只是在你开发的时候把东西记录到控制台。要访问您,请使用常规的点符号,就像您已经使用的 user.username
    • 哦,这让我很困惑!我做了console.log(user) 并看到了一个代理,但user.id 实际上不需要像 toJS 这样的昂贵操作!谢谢!
    猜你喜欢
    • 2020-02-16
    • 2019-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-20
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多