react-native - 可以记录更新的值,但不能用 mobx 流渲染它
问题描述
我试图在没有任何逻辑的情况下进行一个非常简单的 api 调用。尽管我在租赁的控制台中得到一个名为“代理”的难以辨认的对象(也不是预期的),但我无法在 render() 方法中返回任何内容,它会抛出一个类型错误。我的代码:
`Store:
import {observable, configure, action,flow, computed, decorate, set, runInAction} from 'mobx';
import {observer, inject} from 'mobx-react'
configure({enforceActions:'observed'})
class GenStore {
verseData = []
state = "pending"
getVerseData = flow(function*() {
this.verseData = []
this.state = "pending"
try {
const response = yield fetch('https://api.quranwbw.com/2/10')
const data = response.json()
this.state = "done"
this.verseData = data
} catch (error) {
this.state = "error"
}
})
}
decorate(GenStore, {state:observable, verseData: observable, getVerseData:action})
export default new GenStore()
Retrieval:
import {observable, configure, action,flow, computed, decorate, set, runInAction} from 'mobx';
import { computedFn } from "mobx-utils"
import {observer, inject} from 'mobx-react'
import React from 'react'
import GenStore from './GenStore'
class Show extends React.Component{
componentDidMount(){
this.props.GenStore.getVerseData()
}
render(){
console.log(this.props.GenStore.verseData)
return <h1>{this.props.GenStore.verseData.words[0].word_arabic}</h1>
}
}
export default inject('GenStore')(observer(Show))
当我尝试渲染时返回错误:TypeError: Cannot read property '0' of undefined
任何帮助,将不胜感激。提前谢谢。哦,如果您认为 flow 不是选择方法,如果您对如何实现此调用有任何建议,请告诉我并告诉我如何才能做到最好
解决方案
因为getVerseData
是异步函数,并且组件第一次渲染时verseData
是一个空数组(为什么它是空数组?它应该是空对象)并且分别verseData.words
是未定义的。
您可以做几件事来处理它,例如,检查是否verseData.words
存在,如果不存在,则显示一些加载器组件。
推荐阅读
- javascript - 将 Rest API 连接到 Google Charts
- arrays - 如何以数学方式添加数组值
- angular - 如何导入共享模块(使用 Angular Material)来测试 Angular 应用程序?
- python-3.x - 使用recognition_google()时如何解决“API不可用”问题
- android - Android以编程方式设置材料按钮顶部和底部插入(Java)
- python - 使用 Pyzbar 在 Python 中识别没有 http(s) 方案的 URL 的 QR 码
- rust - 如何在多个“编码器”之间共享可变编写器?
- javascript - 如何在javascript中执行一系列带间隔的函数?
- python-3.x - Cron 作业无法执行写入文本文件的 python 脚本
- python - Python电子邮件通知未发送