REDUX: Dispatch не обновляет магазин

Я работаю над проектом, который создает расширение для Chrome. Я пытаюсь отправить функцию в popup.tsx. Однако не отправка. Мой магазин не обновляется. Тот же код работает на фоновой странице. Что я могу сделать? В чем может быть проблема?

Вот мой popup.tsx:

       useEffect(() => {
    if (
      !ip4Cache.hasOwnProperty(hostname) ||
      !geoIPcache.hasOwnProperty(hostname)
    ) {
      console.log('cachede yok')
      checkLookup([hostname]).then((res) => {
        setIp4(res.data['ip4'][hostname])
        dispatch(addIP4(res.data.ip4)) //I also tried store.dispatch in here
       
      })
    }
  }, [hostname])

Вот мой магазин:

      let sagaMiddleware = createSagaMiddleware()

const localStorage = createLocalStorage()
const persistConfig = {
  key: 'root',
  storage: localStorage,
}

const reducers = combineReducers({
  ip4: ip4Reducer,
})

export type RootState = ReturnType<typeof reducers>

const createPersistReducer = (config) => persistReducer(config, reducers)

export const store = configureStore({
  reducer: createPersistReducer(persistConfig),
  middleware: [sagaMiddleware],
})
export const persistor = persistStore(store)

sagaMiddleware.run(rootSaga)

wrapStore(store, { portName: 'bla' })

И последний, слайс IP4:

      import { createSlice } from '@reduxjs/toolkit'

export const ip4Slice = createSlice({
  name: 'ip4',
  initialState: {},
  reducers: {
    addIP4: (state, action) =>
      (state = new Object({ ...state, ...action.payload })),
  },
})
export const { addIP4 } = ip4Slice.actions
export default ip4Slice.reducer

1 ответ

        reducers: {
    addIP4: (state, action) => {
      // either:
      Object.assign(state, action.payload);
      // or 
      return { ...state, ...action.payload }
    }
  },

Пожалуйста, прочтите страницу документации Write Reducers with Immer , особенно Resetting and replace state .

Цитирую самую важную часть:

Распространенной ошибкой является попытка присвоить state = someValueнапрямую. Так не пойдет! Это только указывает локальную переменную состояния на другую ссылку. Это не мутирует существующий объект/массив состояния в памяти и не возвращает совершенно новое значение, поэтому Immer не вносит никаких фактических изменений.

Другие вопросы по тегам