Реакция набора Hook от вызова функции вне компонента

Другим вариантом является использование itertools.cycle

>>> import itertools
>>> notes = ["a", "a#", "b", "c", "c#", "d", "e", "f", "f#", "g", "g#"]

>>> frets = range(21)
>>> for note, fret in itertools.izip(itertools.cycle(notes), frets):
        print ("[%s, %d]" %(note, fret))

[a, 0]
[a#, 1]
[b, 2]
[c, 3]
[c#, 4]
[d, 5]
[e, 6]
[f, 7]
[f#, 8]
[g, 9]
[g#, 10]
[a, 11]
[a#, 12]
[b, 13]
[c, 14]
[c#, 15]
[d, 16]
[e, 17]
[f, 18]
[f#, 19]
[g, 20]

1
задан Jolly 5 March 2019 в 15:27
поделиться

2 ответа

После перепроверки вашего кода я обнаружил, что проблема была вызвана [] в useEffect, вы должны удалить его, но это вызовет еще одну проблему - props.onResize будет вызываться в каждом кадре для решения этой задачи EventListener

0
ответ дан evgeni fotia 5 March 2019 в 15:27
поделиться

Другой ответ немного запутан - то, что вы делаете, хорошо. Когда он говорит, что не вызывайте хуки изнутри, это означает, что не вызывайте реальный API условно или из циклов, например условно определяя useEffect или useState.

Ваша проблема связана с пустым массивом, который вы передаете эффекту в Observer.js, поскольку он пустой, эффект никогда не обновляется, поэтому замыкание устарело, так что когда функция onResize вызывает setState, [ 114] значение всегда будет начальным значением нуля.

Вам необходимо, чтобы useEffect зависело от чего-либо, чтобы при обновлении компонента он очищал предыдущий эффект и прикреплял новую версию функции onResize к ResizeObserver.

Я немного поэкспериментировал с вашей песочницей: https://codesandbox.io/s/x9z7k245lq?fontsize=14

Теперь он передает состояние счетчика в компонент Observer. и эффект будет запускаться каждый раз при изменении счетчика. Дело в том, что я также добавил несколько ссылок в индекс, чтобы отслеживать высоту / ширину, чтобы состояние не всегда обновлялось, иначе оно будет бесконечно зацикливаться. Я думаю, вы можете думать об этом как shouldComponentUpdate.

Нужно некоторое время, чтобы правильно подумать. Если вы хотите прочитать хорошую статью о хуках и избежать некоторых ловушек, касающихся пустых массивов и устаревших замыканий, проверьте это: https://overreacted.io/making-setinterval-declarative-with-react-hooks/ [119 ]

0
ответ дан Tom Finney 5 March 2019 в 15:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: