尝试触发 Mobx 操作会导致未捕获的类型错误
Attempting to fire Mobx action causes Uncaught Type Error
我正在尝试启动 Mobx 操作,但它正在生成错误"Uncaught TypeError: Cannot read property 'arrowVisible' of undefined."无法弄清楚原因(函数正在被 react-waypoint 触发):
(codesandbox.io 此处复制)
import React from "react";
import PropTypes from "prop-types";
import { Container, Row, Col } from "reactstrap";
import { observer, inject } from "mobx-react";
import Waypoint from "react-waypoint";
@inject("styleStore")
@observer
export class Questions extends React.Component {
constructor(props) {
super(props);
this.state = {
entered: false
};
}
componentDidMount() {
window.scrollTo(0, 0);
}
setWaypointEnter() {
// Set waypoint state
this.setState({ entered: true });
// Use updated state for UI waypoints animation.
if (this.state.entered) {
this.props.styleStore.isArrowVisible("yes");
}
}
render() {
return (
<QuestionsDiv id="questions">
<Container>
<Waypoint
scrollableAncestor={window}
onEnter={this.setWaypointEnter.bind(this)}
fireOnRapidScroll={true}
topOffset="40%"
/>
...
这是 MobX 商店:
import { observable, action } from "mobx";
class StyleStore {
@observable nextLink;
@observable arrowVisibile;
@action
isArrowVisibile(visibility) {
this.arrowVisibile = visibility;
console.log(this.arrowVisibile);
}
}
export default StyleStore;
并index.js加载提供程序:
import App from "./App";
import { BrowserRouter } from "react-router-dom";
import { Provider } from "mobx-react";
import StyleStore from "./stores/styleStore";
import registerServiceWorker from "./registerServiceWorker";
const stores = {
styleStore: new StyleStore()
};
ReactDOM.render(
<BrowserRouter>
<Provider {...stores}>
<App />
</Provider>
</BrowserRouter>,
document.getElementById("root")
);
registerServiceWorker();
我也在使用 react-app-rewire-mobx。所以 .babelrc 看起来像这样:
{
"presets": ["mobx"]
}
我在这里遗漏了什么会导致此错误?另一个 MobX 操作,ChangeNextLink,按编码工作。
问题好像出在这里
this.props.styleStore.arrowVisible();
arrowVisible 是一个可观察的 属性 而不是一个动作,您可能想调用
this.props.styleStore.isArrowVisible();
您的商店也有拼写错误
@action
isArrowVisibile(visibility)
应该是
@action
isArrowVisible(visibility)
我正在尝试启动 Mobx 操作,但它正在生成错误"Uncaught TypeError: Cannot read property 'arrowVisible' of undefined."无法弄清楚原因(函数正在被 react-waypoint 触发):
(codesandbox.io 此处复制)
import React from "react";
import PropTypes from "prop-types";
import { Container, Row, Col } from "reactstrap";
import { observer, inject } from "mobx-react";
import Waypoint from "react-waypoint";
@inject("styleStore")
@observer
export class Questions extends React.Component {
constructor(props) {
super(props);
this.state = {
entered: false
};
}
componentDidMount() {
window.scrollTo(0, 0);
}
setWaypointEnter() {
// Set waypoint state
this.setState({ entered: true });
// Use updated state for UI waypoints animation.
if (this.state.entered) {
this.props.styleStore.isArrowVisible("yes");
}
}
render() {
return (
<QuestionsDiv id="questions">
<Container>
<Waypoint
scrollableAncestor={window}
onEnter={this.setWaypointEnter.bind(this)}
fireOnRapidScroll={true}
topOffset="40%"
/>
...
这是 MobX 商店:
import { observable, action } from "mobx";
class StyleStore {
@observable nextLink;
@observable arrowVisibile;
@action
isArrowVisibile(visibility) {
this.arrowVisibile = visibility;
console.log(this.arrowVisibile);
}
}
export default StyleStore;
并index.js加载提供程序:
import App from "./App";
import { BrowserRouter } from "react-router-dom";
import { Provider } from "mobx-react";
import StyleStore from "./stores/styleStore";
import registerServiceWorker from "./registerServiceWorker";
const stores = {
styleStore: new StyleStore()
};
ReactDOM.render(
<BrowserRouter>
<Provider {...stores}>
<App />
</Provider>
</BrowserRouter>,
document.getElementById("root")
);
registerServiceWorker();
我也在使用 react-app-rewire-mobx。所以 .babelrc 看起来像这样:
{
"presets": ["mobx"]
}
我在这里遗漏了什么会导致此错误?另一个 MobX 操作,ChangeNextLink,按编码工作。
问题好像出在这里
this.props.styleStore.arrowVisible();
arrowVisible 是一个可观察的 属性 而不是一个动作,您可能想调用
this.props.styleStore.isArrowVisible();
您的商店也有拼写错误
@action
isArrowVisibile(visibility)
应该是
@action
isArrowVisible(visibility)