Но получить новый массив для второго действия действительно надо. В рамках ограничений концепции useReducer, это можно сделать только внутри вызова редьюсера. Так что здесь проще всего схлопнуть два редьюсера (reducerArr и reducerRndNum) в один, а в экшен SET_RND_NUM не передавать рандомное число, перенеся эту логику в редьюсер. Да, редьюсер перестанет быть "чистой функцией", но невелика потеря.
Вообще-то afterClick вызывается после клика, то есть когда юзер отпустил кнопку мыши. Но если хочешь ещё "чуть более после", то к вышеперечисленным вариантам добавлю макротаск через промис.
AlexNew22, valueOf сделан как обычная (не стрелочная) функция, значит this определяется при вызове.
А вызван он будет через точку: arr.valueOf(). В твоем коде нет этого вызова, это js добавляет "от себя". Потому в this подставляется arr, то есть то, что стоит перед точкой.
Поскольку valueOf нет в самом arr, он будет найден в прототипе, но в this всё равно пойдет arr, так мир устроен.
читай главы учебника про объекты, прототипы и т.д.
Slavik KENNY, это было бы возможно, если бы условие не требовало посимвольно кодировать буквы.
Тогда, поскольку алфавит всего из 7 букв, возможно 7 ^ 21 = 558545864083284007 различных паролей.
59-битное число дает 576460752303423488 различных значений, что немного больше.
pomozov, я нихрена не понимаю в пхп, и не могу сказать о правильности перевода. Например, $childs[] = ['page' ...] - это ведь просто добавление в конец массива, того самого, который лежит в карте?
мой вариант, если что, можно глянуть в консоли браузера, там и подебажить.
xULAIROW, ну в каком-то смысле да.
В react testing library нет функции, аналогичной shallow из enzyme, которая бы рендерила сам компонент, но не рендерила все пользовательские компоненты, в нем используемые, потому что testing library заточена под "реальный" рендер с помощью jsdom - то есть в "условиях, максимально близких к боевым".
Так что если не хочешь, чтобы в тесте SomeComponent участвовал Button, придется его замокать. Но только ради симуляции клика смысла в этом особо нет. Вот чтобы посмотреть входящие пропсы для Button, можно так сделать.
vladimir_vist, useRef - просто ячейка, в которой можно что-то хранить между рендерами, пока компонент не размаунтится.
В чистом реакте компоненты обновляются, если используешь useState, useReduce, или изменились пропсы компонента. Причем объекты сравниваются по ссылке (т.е. нельзя просто взять и поменять что-то внутри существующего объекта, чтобы ui обновился). Царство иммутабельности и чистых функций. Натянуть на это дело ООП (или всё это натянуть на ООП) не получится без костылей.
автор mobx по факту запилил собственную систему реактивности, основанную на проксях и аналогичную vue.
В системе вычетов по модулю M, прибавить (M-1) - то же самое, как отнять 1. Здесь это используется, чтобы не выскакивать в отрицательные числа, где % работает не совсем правильно.
действие должно остаться в обработчике.
Но получить новый массив для второго действия действительно надо. В рамках ограничений концепции useReducer, это можно сделать только внутри вызова редьюсера. Так что здесь проще всего схлопнуть два редьюсера (reducerArr и reducerRndNum) в один, а в экшен SET_RND_NUM не передавать рандомное число, перенеся эту логику в редьюсер. Да, редьюсер перестанет быть "чистой функцией", но невелика потеря.