[英]mobx: array.map() is not a function
我使用mobx
创建了一个商店,如下所示:
import {extendObservable} from 'mobx';
class InfluencerFeedStore {
constructor() {
extendObservable(this, {
data: []
});
}
setData(items = []) {
this.data = items;
}
}
export default new InfluencerFeedStore();
然后我在React视图中观察该商店:
import React from 'react';
import {observer} from 'mobx-react';
import FeedItem from './FeedItem';
import InfluencerFeedStore from '../../core/stores/InfluencerFeed';
import './style.css';
const generateItems = () => {
return InfluencerFeedStore.data.map((item, i) => (
<FeedItem key={`feeditem-${i}`} {...item} />
));
};
const Feed = () => (
<div className="Feed vertical-scroll-flex-child">
{generateItems()}
</div>
);
export default observer(Feed);
在第一次渲染时,我的Feed
视图工作正常(尽管InfluencerFeedStore.data
数组中没有项目)。
如果我稍后通过调用InfluencerFeedStore.setData()
加载项目,React将正确地尝试重新呈现Feed
视图(因为它注意到mobx observable已更新)...但我收到一个错误抱怨InfluencerFeedStore.data.map is not a function
。
通过阅读mobx
文档,我认为重新分配我的data
属性是有问题的,因为它是一个数组(而其他数据类型,如字符串“只是工作”)。 谁能告诉我这里我做错了什么?
事实证明我有两个问题:
replace()
方法来覆盖可观察数组 ,而不是试图完全重新分配新值 setData()
方法; 这就是我点击“地图不是函数”错误的原因 它应该如下所示:
import {extendObservable} from 'mobx';
class InfluencerFeedStore {
constructor() {
extendObservable(this, {
data: []
});
}
setData(items = []) {
this.data.replace(items);
}
}
export default new InfluencerFeedStore();
问题是(我认为根据我的评论)你没有从类的实例访问“数据”,你正在静态访问它,所以类的构造函数永远不会运行,“data”永远不会初始化。 “ObservableFeed”是一个实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.