2015-11-17 2 views
0

У меня есть компоненты оболочки, которые динамически вычисляют размер и положение, в котором они должны быть. Обычно это работает и отлично работает с shouldComponentUpdate, но как только я добавляю детей внутри этих компонентов, я больше не могу использовать этот метод. Зачем? Потому что, если я возвращать «ложь» для оболочки необходимости обновления ... дети никогда не обновляются сами :(shouldComponentUpdate и дочерние компоненты

Пример JSX:

<ReactWrapper> <ChildElement/> </ReactWrapper>

Есть ли хороший способ обойти это только идея? Я должен добавить новый shouldUpdateChildren метода, как этот другой вопрос подробно: https://discuss.reactjs.org/t/shouldcomponentupdate-and-children/2055

+0

Можете ли вы показать код используемой логики? Зачем вам нужно «возвращать false» в 'shouldComponentUpdate'? –

+0

Просто потому, что нет необходимости выполнять какие-либо вычисления для x, y, width, height компонента. Зачем пересказывать, когда вы знаете, что вам не нужно? – Obto

ответ

0

Вы, вероятно, нужно добавить следующий йор shoudComponentUpdate:

this.props.children !== prevProps.children //according to below the thread

this.props.children !== nextProps.children //according to me

Вот интересная нить на этом: https://github.com/facebook/react/issues/12185#issuecomment-364531032

Я удивляюсь, почему Дэн называет это prevProps. Насколько мне известно, shouldComponentUpdate получает nextProps, nextState и nextContext. По крайней мере, в React Native. Разве это различно в регулярном Реате?

Edit:

Я прочитал вашу связанную нить, и я думаю, я понимаю ваше дело лучше.

У меня есть аналогичный случай, когда у меня есть локальная функция calcParams() в родительском компоненте, который не нужно вызывать для каждого дочернего обновления.

Я просто делаю чек в начале calcParams, чтобы увидеть, будут ли какие-либо реквизиты, которые повлияют на вычисления, будут изменены. Я сохраняю результат вычислений в this.calculatedParams, то есть не в this.state.calculatedParams как this.state должен быть установлен только через setState().

Я оставлю свой первоначальный ответ выше, потому что это родственный.

Смежные вопросы