Pull to refresh

Comments 18

UFO just landed and posted this here
Для профайлинга рекомендую React Perf (недавно переписан) + расширение для Chrome.
Вообще-то, для такой цели давно изобретен Reselect.
И под шум волны можно использовать Virtualized, для рендеринга большого количества элементов в списке/гриде.
virtualized — это рендер куска списка. Начать с оптимизации рендера вполне здравая идея, прежде чем тянуть дополнительную библиотеку в проект. Особенно если кол-во элементов в списке конечно и предсказуемо.
Статья про то, что есть shouldComponentUpdate.
В коде редьюсера есть прекрасное:

state = {
      targets: [
          ...state.targets.slice(0, i),
          updatedTarget,
          ...state.targets.slice(i + 1)
       ]
}


По сути, вам нужно вернуть копию массива с замененным одним элементом. Это делается через map в одну строку

state.targets.map((target, index) => index === i ? updatedTarget : target)


К чему это увлечение модным синтаксисом, если можно проще?
А поскольку статья о производительности, то замечу, что это будет еще и быстрее.
Согласен, map выглядет намного проще. Про производительность у меня есть сомнения (да-да, я прочитал дискуссию по ссылке), но всё же следует проверить самому. В любом случае, я не думаю что разница большая.
UFO just landed and posted this here
Я имел в виду чрезмерное увлечение.

Там, где это оправдано, почему бы и нет.
UFO just landed and posted this here
Понимаю, что не везде но .bind(this) значит не лень писать :)?
UFO just landed and posted this here
А если вместо нативного map взять lodash map то еще быстрее будет =)
shouldComponentUpdate(newProps, newState) {
    // проверяем что порядок и кол-во элементов остались прежними
    // то есть если id остались прежними, значит у нас нет "больших" изменений
    const changed = newState.targets.find((target, i) => {
        return this.state.targets[i].id !== target.id;
    });
    return changed;
}

здесь может вылететь ошибка, если в newState.targets больше элементов, чем в this.state.targets

Статью можно сократить до предложения «Используйте mobx для менеджмента стейта приложения.». Полностью согласен, кстати.
Sign up to leave a comment.

Articles