redux

redux saga then Делает возвращаемый Promise значением undefiend

Вызов вида:

function* login({payload}:  PayloadAction<LoginReguestData>) {
    console.log('-----------login reques22222222t!');
    const loginResponse: string = yield call(loginUser, payload.login, payload.password);
    console.log('loginResponse', loginResponse);
}

(считаем, что loginUser() возвращает Promise)
-- в данном примере yield call просто распаковывает значение, которым разрешился промис (см. пример, когда такое разрешение может быть undefined)

redux saga call No overload matches this call Ошибка

Ошибка означает, что у вас не та сигнатура вызова, напр. если вам надо вызвать функцию вида:
function loginUser(username: string, password: string)

то вызов надо делать так:

function* login({payload}:  PayloadAction<LoginReguestData>) {
    yield call(loginUser, payload.login, payload.password);
}

а не так:

react useParamSelector Передача параметров в useSelector - пример реализации

Вариант для typescript:

import { shallowEqual, useSelector } from 'react-redux';

import { RootState } from 'types/RootState'; // некое ваше описание структуры хранилища

export const useParamSelector = <TArgs extends Array<any>, TValue>(
  parametrizedSelector: (state: RootState, ...params: TArgs) => TValue,
  ...selectorParams: TArgs
) => {
  return useSelector((state: RootState) => parametrizedSelector(state, ...selectorParams), shallowEqual);
};

redux saga Несколько put() выполняются без ререндера между вызовами

Судя по практике, если выполнять в одной саге несколько put() (без вызова delay() или чего-то вроде между ними), то ререндера между обновлениями состояния редакса через put() не происходит.

redux Сохранение функции, коллбэка в глобальном стейте

Вроде как так делать неправильно, подробности выяснем

redux toolkit reducer Обновить, заменить весь объект состояния

Как и в обычном редьюсере для этого следует использовать явный return, например для

createSlice():

const mapSlice = createSlice({
  name: 'planSettings',
  initialState: getPlannerState(),
  reducers: {
    setUsedColorsIds(state, { payload }: PayloadAction<number[]>) {
      state.usedColorsIds = payload; // обновляем подобъект
    },
    setEntireState(state, { payload }: PayloadAction<PlanState>) {
      return payload; // обновляем весь объект!
    },
  },
});

React can't define property "....": "..." is not extensible & TypeError: Cannot assign to read only property

TypeError: Cannot assign to read only property
can't define property "....": "..." is not extensible

-- одной из причин таких ошибок (напр. если вы просто используете какие-то объекты в useRef()) может быть то, что кто-то выполняем object.freeze() для этой сущности,
этим кем-то может быть Redux (если ваши сущности не только хранятся в реф, но и отправляются в стейт редакса), если объект попадает туда по ссылке, используйте декомозицию сущности:

{...yourObject}

-- чтобы получить незамороженную версию

redux Как начать. Примеры

uncaught type error dispatch is not a function Ошибка с redux mapDispatchToProps

uncaught typeerror dispatch is not a function

Если вы используете mapDispatchToProps без mapStateToProps , то просто передайте null первым аргументов в connect():

const mapDispatchToProps = dispatch =>
    bindActionCreators(
        {
            getCm,
            deleteCm
        },
        dispatch
    );


export default connect(
    null,
    mapDispatchToProps
)(CmList);

Pages

Subscribe to RSS - redux