尝试在本机 Ignite 模板中使用 MST 时出现 'undefined is not an object' 错误
Getting 'undefined is not an object' error when trying to use MST in react native Ignite template
我正在使用 Ignite template for react native。我创建了一个简单的对象模型和存储,如下所示:
export const TimeObject = types.model('TimeObject', {
id: types.identifier,
hour: types.string,
minutes: types.string,
amOrPm: types.enumeration(['AM', 'PM']),
timeStamp: types.number,
numOfDrugs: types.number,
});
export const TimeStore = types
.model('TimeStore', {
time: types.map(TimeObject),
})
.actions(self => ({
addTime(json) {
const ids = [];
json.forEach(timeJson => {
if (!timeJson.id) {
timeJson.id = uuid.v1();
}
ids.push(timeJson.id);
self.time.put(timeJson);
});
return ids;
},
}));
当我在屏幕组件中使用它时:
const { timeStore } = useStores();
const timeId = timeStore.addTime([
{
hours,
mins,
amOrPm,
timeStamp: timeStamp.getTime(), //With correct values given for inputs
},
]);
我收到未定义的错误。我不确定我做错了什么。我正在 Storybook 上测试它,是否有不同的程序将它导入那里?
我可以通过更改 app.tsx
中 ToggleStorybook
和 RootStoreProvider
的顺序来解决这个问题,现在它看起来像这样:
<RootStoreProvider value={rootStore}>
<ToggleStorybook>
<SafeAreaProvider initialMetrics={initialWindowMetrics}>
<RootNavigator
ref={navigationRef}
initialState={initialNavigationState}
onStateChange={onNavigationStateChange}
/>
</SafeAreaProvider>
</ToggleStorybook>
</RootStoreProvider>
我认为是因为 Storybook 被切换了,所以它从未进入 RootStore,因此无法在 Storybook 组件中访问它,但这种方法现在有效。
我正在使用 Ignite template for react native。我创建了一个简单的对象模型和存储,如下所示:
export const TimeObject = types.model('TimeObject', {
id: types.identifier,
hour: types.string,
minutes: types.string,
amOrPm: types.enumeration(['AM', 'PM']),
timeStamp: types.number,
numOfDrugs: types.number,
});
export const TimeStore = types
.model('TimeStore', {
time: types.map(TimeObject),
})
.actions(self => ({
addTime(json) {
const ids = [];
json.forEach(timeJson => {
if (!timeJson.id) {
timeJson.id = uuid.v1();
}
ids.push(timeJson.id);
self.time.put(timeJson);
});
return ids;
},
}));
当我在屏幕组件中使用它时:
const { timeStore } = useStores();
const timeId = timeStore.addTime([
{
hours,
mins,
amOrPm,
timeStamp: timeStamp.getTime(), //With correct values given for inputs
},
]);
我收到未定义的错误。我不确定我做错了什么。我正在 Storybook 上测试它,是否有不同的程序将它导入那里?
我可以通过更改 app.tsx
中 ToggleStorybook
和 RootStoreProvider
的顺序来解决这个问题,现在它看起来像这样:
<RootStoreProvider value={rootStore}>
<ToggleStorybook>
<SafeAreaProvider initialMetrics={initialWindowMetrics}>
<RootNavigator
ref={navigationRef}
initialState={initialNavigationState}
onStateChange={onNavigationStateChange}
/>
</SafeAreaProvider>
</ToggleStorybook>
</RootStoreProvider>
我认为是因为 Storybook 被切换了,所以它从未进入 RootStore,因此无法在 Storybook 组件中访问它,但这种方法现在有效。