1

MobX の観測可能な配列があり、複数の要素を lodash のremoveで削除したいと考えています。これにより、配列内のすべての要素が再レンダリングされます。

const array = observable([1,2,3,4,5,1]);

const App = observer(() => {
  console.log('Rendering...');
  return (
    <div>
      { array.map(e => <div> {e} </div>)}
    </div>
  );
});

ReactDOM.render(
  <App />,
  document.getElementById('app')
);

のすべての出現を削除しようとすると1Rendering...要素ごとに 1 回ログに記録されます。

_.remove(array, num => num === 1);
> "Rendering..."
> "Rendering..."
> "Rendering..."
> "Rendering..."
> "Rendering..."
> "Rendering..."

一度だけ再レンダリングするようにするにはどうすればよいですか?

4

1 に答える 1

5

MobX への API はバニラの JavaScript と同じように見えますが、監視可能な配列が変更されるたびに、すべてのオブザーバーが同期的に更新されます。これを軽減する 1 つの方法は、コードをrunInActionに配置することです。

runInAction(() => _.remove(array, num => num === 1));
> "Rendering..."
于 2016-08-08T10:09:00.993 に答える