2

在 react-typescript 项目中使用 mobx。此类使用 fetch api 设置可观察数组:

class MenuRepo {
  @observable menuItems?: IMenuModel[];//=[{Id:1,itemName:"asd",childItems:[]}];
  @action getItems(): void {
    fetch(`...`)
      .then((response: { value: IMenuModel[] }): void => {
        this.menuItems = [
          { Id: 1, itemName: 'test-item1', childItems: [] }
        ];
      });
  }

我想在这个组件类中跟踪这个可观察的数据:

@observer
class Menu extends React.Component<{params?:IMenuModel[]}, {}> {
  render() {
    debugger
    var menuJSX : JSX.Element[] = this.props.params ? this.props.params.map((item:IMenuModel, i:number)=>{
      return (<li key={item.Id}>{item.itemName}</li>)
    }):[];
    return (...)

但 params 是“未定义的”。我看了一些关于 mobx&react 的教程,但无法解决。

这里是 App.tsx 文件:

import menuCodes from './components/Codes';
class App extends React.Component<null, null> {
  render() {
    return (
      <div className="App">
        <Menu params = {asd.menuItems}/>
      </div>
    );
  }
}
export default App;
4

1 回答 1

1

asd实例MenuRepo吗?请注意,在第一次渲染中 menuItems 将是未定义的,因为它仅在获取解决后才获得它的第一个值,这应该会产生第二次渲染。

请注意,App应该是observer取消引用menuItemsobservable 的那个。(更多信息:https ://mobx.js.org/best/react.html )

于 2017-03-13T09:47:14.880 回答