Mobx-React React 不重新渲染
Mobx-React React Not re-rendering
这里有一些使用 Mobx 管理的 React 组件的代码state.But不同的使用方式会导致完全不同的结果。
App.js
import React from "react";
import "./styles.css";
import { observer } from "mobx-react";
import store from "./store";
const Span = () => {
return <span>{store.count}</span>;
};
const app = function () {
return (
<div className="App">
{/* section 1 */}
<Span />
{/* section 2 */}
{/* <span>{store.count}</span> */}
<button onClick={() => store.setCount(store.count + 1)}>Click</button>
</div>
);
};
export default observer(app);
store.js
import { observable, action } from "mobx";
class Store {
@observable count = 0;
@action setCount(count) {
this.count = count;
}
}
export default new Store();
使用第 1 部分,单击按钮不会刷新视图,但使用第 2 部分会。
1、我想知道这两种方式的区别?
2、如果我坚持第 1 部分,我该如何更改代码?
只需将 observer
包裹在您的 Span
组件上。
const Span = observer(() => {
return <span>{store.count}</span>;
});
Span
没有观察你的商店,所以它不知道发生了什么变化。
这里有一些使用 Mobx 管理的 React 组件的代码state.But不同的使用方式会导致完全不同的结果。
App.js
import React from "react";
import "./styles.css";
import { observer } from "mobx-react";
import store from "./store";
const Span = () => {
return <span>{store.count}</span>;
};
const app = function () {
return (
<div className="App">
{/* section 1 */}
<Span />
{/* section 2 */}
{/* <span>{store.count}</span> */}
<button onClick={() => store.setCount(store.count + 1)}>Click</button>
</div>
);
};
export default observer(app);
store.js
import { observable, action } from "mobx";
class Store {
@observable count = 0;
@action setCount(count) {
this.count = count;
}
}
export default new Store();
使用第 1 部分,单击按钮不会刷新视图,但使用第 2 部分会。
1、我想知道这两种方式的区别?
2、如果我坚持第 1 部分,我该如何更改代码?
只需将 observer
包裹在您的 Span
组件上。
const Span = observer(() => {
return <span>{store.count}</span>;
});
Span
没有观察你的商店,所以它不知道发生了什么变化。