Redux no está actualizando el estado en reaccionar solo en el navegador Safari, pero en Chrome funciona bien. cuando consuelo la acción en caso de VISITS_SEARCH: obtengo una matriz vacía en Safari. sin embargo, obtengo una matriz válida en la consola de Chrome
export const visitsReducer = (state = initialState, action) => { console.log("🚀 ~ file: visits-reducer.js ~ line 28 ~ visitsReducer ~ action", action) return produce(state, (draftState) => { switch (action.type) { case GET_VISIT_LIST: draftState.isWorking = true; draftState.error = null; return; case GET_VISIT_LIST_SUCCESS: draftState.isWorking = false; draftState.visits = action.visits; console.log("🚀 ~ file: visits-reducer.js ~ line 39 ~ returnproduce ~ action", action) return; case VISITS_SEARCH: draftState.searchResults = action.visits; console.log("🚀 ~ file: visits-reducer.js ~ line 80 ~ returnproduce ~ action", action) return; default: return; } }); };en redux, nunca debe cambiar el estado que obtiene del argumento. en su lugar, debe devolver los valores que desea cambiar y su valor que no desea cambiar. por eso tienes este problema. usted debe hacer esto:
case GET_VISIT_LIST: return { ...state, isworking: true, error: null } cambiar el estado que obtiene del argumento en el kit de redux toolkit es correcto y puede usar el kit de redux toolkit
Lo arreglé. No tiene ninguna relación con la búsqueda después de perder el tiempo comprobando esto. En una función de clasificación por fecha, la fecha era 9999-1-1, que no es válida para Safari. Tuve que cambiarla para que fuera 9999-01-01.
Supongo que completa los datos con fetch. Este es un problema común según Redux Docs:
Usamos fetch API en los ejemplos. Es una nueva API para realizar solicitudes de red que reemplaza a XMLHttpRequest para las necesidades más comunes. Debido a que la mayoría de los navegadores aún no lo admiten de forma nativa, le sugerimos que use la biblioteca de búsqueda cruzada:
// Do this in every file where you use `fetch` import fetch from 'cross-fetch'Internamente, usa whatwg-fetch polyfill en el cliente y node-fetch en el servidor, por lo que no necesitará cambiar las llamadas a la API si cambia su aplicación para que sea universal.
Tenga en cuenta que cualquier polirrelleno de búsqueda asume que ya existe un polirrelleno de Promise. La forma más fácil de asegurarse de tener un polyfill de Promise es habilitar el polyfill ES6 de Babel en su punto de entrada antes de que se ejecute cualquier otro código:
// Do this once before any other code in your app import 'babel-polyfill'