在我的React / Javascript应用中,我有一个如下的组件类:
// CustomComponent.js
import * as model from "model.js";
class CustomComponent extends Component {
state = {
someObject: null
};
constructor() {
super();
this.state.someObject = model.someObject;
}
... // render, etc...
}
我有一个模型文件负责存储和计算内容:
// model.js
export var someObject = {
property1,
property2,
...
// Here are functions processing the data, for instance
// someObject could be a matrix for a game, handling all the game logic
}
function changeObject() {
// Somehow this function get called, from an animation loop or an external class for instance
// This function changes properties of the object
}
现在,我希望在修改网格对象时更新/渲染组件(“自定义”及其子元素)。现在,处于状态的对象已更改,但是由于未调用setState()
,因此组件未更新。
该如何更改我的实现?我想保留一个单独的文件来处理模型逻辑。
答案 0 :(得分:0)
您可以使用状态容器来执行此操作。有多个此类库:
Redux
可能是React社区中最受欢迎的。这是一个非常干净的应用程序级状态容器/存储-Flux
和Elm
的实现。在这里,状态是不可变的,您可以使用操作和化简器更改属性,并从任何组件的应用程序状态访问它们。MobX
是另一个将您的状态包装到observables
中的状态。这里的状态是可变的,您有多个商店(而不是Redux中的应用程序级别的单个商店)RxJS
(观察者模式),Alt
(通量),Relay
(通量+ GraphQL)答案 1 :(得分:0)
如果您不想添加redux e.c.t.您可以使用forceUpdate。 https://reactjs.org/docs/react-component.html#forceupdate