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
から項目を追加または削除する場合は、リストが更新されません。更新するには、TodoList
の周りにobserver
をラップする必要があります。 の@observer
は、私が観測されたプロパティにアクセスしないので何もしません。しかし、学習目的のために、observer
をコンテナにのみ使用したいと考えています。 todos
が変更されるたびにコンテナを再レンダリングさせたい。
これを行う1つの方法はTodoListContainer
の中でtodos
のすべてを反復処理することです。たとえば、TodoListContainer.render
には、for (let todo of todos) {}
またはtodos.forEach(_ => _)
を追加できます。それを行うより良い方法はありますか?たとえば、Ember Dataでは、todos.[]
を実行して、すべての変更をリスンすることを表すことができます(todos
)。
ベンチマークの後で、レンダリングを強制する最も速いハックの方法は、 'todos.length'を' render'に置くことです。 –