我剛剛開始學習MobX,並且想要使用MobX監聽所有數組更改(插入,刪除等)。一個例子可以說明這更好的:如果我添加使用MobX監聽數組更改
const TodoList = ({todos}) => (
<ul>
{todos.map(todo => <li key={todo.id}>
<TodoContainer todo={todo}/>
</li>)}
</ul>
);
module.exports = @observer class TodoListContainer extends React.Component {
static contextTypes = {
todoStore: React.PropTypes.instanceOf(TodoStore),
};
render() {
let todos = this.context.todoStore.getTodos();
return <TodoList todos={todos}/>;
}
}
或todos
刪除一個項目,不更新列表。爲了使它更新,我需要包裝observer
約TodoList
。 TodoListContainer
上的@observer
不會執行任何操作,因爲我沒有訪問任何觀察到的屬性。但是,僅出於學習目的,我只想在容器上使用observer
。我想讓容器在每次更改todos
時都要重新提交。
做到這一點的一種方法是在TodoListContainer
中做任何事情,遍歷所有todos
。例如,在TodoListContainer.render
中,我可以添加for (let todo of todos) {}
或todos.forEach(_ => _)
。有沒有更好的方法來做到這一點?例如,在Ember Data中,您可以執行todos.[]
來代表收聽todos
中的所有更改。
經過一番基準測試後,我認爲強制渲染的最快速的方法是將'todos.length'放入'render'中。 –