Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   react toolkit (https://javascript.ru/forum/node-js-io-js/84346-react-toolkit.html)

od0201 12.08.2022 16:47

react toolkit
 
Доброе время суток
нужно в редюсере вызвать другой редюсер
setAnimate(state,{payload:id}:PayloadAction<number>){
...
},
clickPuzzle(state,{payload:id}:PayloadAction<number>){
  puzzlesSlice.caseReducers.setAnimate(state,id);
//puzzlesSlice.caseReducers.setAnimate(state,{payload:id});
}

ругается на отправляемые параметры setAnimate()
Код:

(parameter) id: number
Аргумент типа "number" нельзя назначить параметру типа "{ payload: number; type: string; }".

что не так понятно, но как ???
спасибо

od0201 12.08.2022 18:51

clickPuzzle(state,{payload:id,type}:PayloadAction<number>){
  puzzlesSlice.caseReducers.setAnimate(state,{payload:id,type}); 
}
так решил проблему, работает, но меня берут сомнения что я верно это делаю, да и с PayloadAction<number> это не вяжется

Nexus 12.08.2022 18:52

Цитата:

Сообщение от od0201
что не так понятно, но как ???

Если всё понятно, то в чем вопрос?

У вас вторым аргументом должен быть объект типа PayloadAction<number>, судя по сообщению об ошибке PayloadAction должен иметь 2 свойства: payload типа number и type типа string.

ts playground

Необходимый тип action'а для редьюсера setAnimate подставить не забудьте.

od0201 12.08.2022 23:15

Теперь немного понятно, есть сомнение правильный ли подход. В примере из гугла параметры вообще не передавали. Тек-же кажется странным что type вообще в не используется, что бы мы туда не записали, все равно работает как надо.
puzzlesSlice.caseReducers.setAnimate(state,{payload:id,type:'puzzles/setAnimate'});


Часовой пояс GMT +3, время: 03:49.