javascript - mobX:TypeError:无法读取未定义的属性
问题描述
我只是用 mobX 的一些代码来操场,这发生了,不知道为什么,但我确信它与官方文档没有太大区别
这是store.tsx
import { observable, computed, action, makeObservable, override, makeAutoObservable } from "mobx"
class CounterStore {
initValue = 0
powValue = Math.pow(this.initValue, 2)
constructor() {
makeAutoObservable(this)
}
increaseNumber() {
this.initValue = this.initValue + 1
}
}
const Store = new CounterStore()
export default Store
这是我使用它的地方。称为增加.tsx
import { observer } from "mobx-react"
export const IncrementButton = observer(({ store }) => {
return (
<div>
<button onClick={store.increaseNumber}>Increase</button>
<h1>{store.initValue}</h1>
</div>
)
})
和index.tsx
ReactDOM.render(
<React.StrictMode>
<IncrementButton store={Store} />
{/* <TestUseState /> */}
{/* <TestEffect />
<UseMemoTest /> */}
</React.StrictMode>,
document.getElementById("root"),
奇怪的是,它显示initValue
,但是当我点击增加它显示can't not read properties
请帮助,谢谢
解决方案
正如@mimoid 所注意到的,您的方法未绑定到类并丢失上下文(this
)。这不是 MobX 的问题,它只是称为 后期绑定的常规 javascript 功能。
尽管您实际上不需要更改makeAutoObservable
为makeObservable
,但您可以只使用箭头函数,在我看来这是更“原生”的方式:
class CounterStore {
initValue = 0
powValue = Math.pow(this.initValue, 2)
constructor() {
makeAutoObservable(this)
}
// Just make it an arrow function
increaseNumber = () => {
this.initValue = this.initValue + 1
}
}
推荐阅读
- swift - UICollectionView UItableViewCell 内部没有水平滚动
- python - Python 线程池消耗了我所有的 RAM 和系统挂起
- c# - 调用方法包含UI交互时如何等待所有任务?
- xamarin - Xamarin Forms - 从 URL 获取的图像未在 Android 中显示
- java - @Repository 类中的自引用导致循环引用
- javascript - 无法在 Commerce JS 上“捕获订单”
- python - 在python中解析以下文本的最佳方法是什么
- python - 如何在 PuLP (Python) 约束中调用函数?
- flutter - Flutter 桌面后台作业
- sql - 使用 Draw.io 生成 SQL/DDL 脚本?