type react multiple es6 creators bindactioncreators actions reactjs redux

reactjs - react - redux-thunk



bindActionCreators esperaba una funciĆ³n actionCreator para la clave ''ACCOUNT_LOGIN'', en su lugar recibiĆ³ el tipo ''string'' (5)

bindActionCreators esperaba una función actionCreator para la clave ''ACCOUNT_LOGIN'', en su lugar recibió el tipo ''string''.

Empecé a recibir hoy este error de la nada para todos los bindActionCreators en la aplicación.
Incluso fui a la historia anterior de GIT, donde estoy seguro de que no estaba teniendo este error, y ahora está allí también.
La aplicación aún funciona, pero los errores emergentes en cada ruta cambian.

¿Alguien tuvo este problema antes? ¿O alguna idea de dónde podría venir? Puedo proporcionar más código, si abajo no es suficiente.

Envase:

import { bindActionCreators } from ''redux''; import { connect } from ''react-redux''; import account from ''../components/account''; import * as AccountActions from ''../actions/account''; function mapStateToProps(state) { return { username: state.account.username, password: state.account.password, loggedIn: state.account.loggedIn, registred: state.account.registred, loading: state.account.loading, clientId: state.account.clientId }; } function mapDispatchToProps(dispatch) { return bindActionCreators(AccountActions, dispatch); } export default connect(mapStateToProps, mapDispatchToProps)(account);

Acción:

export const ACCOUNT_LOGIN = ''ACCOUNT_LOGIN''; export function login(username, password) { return { type: ACCOUNT_LOGIN, username, password, loggedIn: false, loading: false }; ...

Reductor:

import { ACCOUNT_LOGIN, } from ''../actions/account''; type actionType = { type: string }; const initialState = { username: '''', password: '''', loggedIn: false, registred: false, loading: false, clientId: '''' }; export default function account(state = initialState, action: actionType) { switch (action.type) { case ACCOUNT_LOGIN: return Object.assign({}, state, { username: action.username, password: action.password, loggedIn: action.loggedIn, loading: action.loading }); }

Error:


Encontré un buen enfoque para filtrar objetos importados (con lodash), y solo dejó funciones dentro de él. Ayuda.

import * as itemActions from "../actions/itemActions"; // here i have strings also const filteredActions = _.pickBy(itemActions, _.isFunction); export default connect( mapStateToProps, filteredActions )(ItemContent)


Está export una sustancia como _ACCOUNT_LOGIN_ y luego import ing * as AccountActions .

Desde v3.7.0 redux advierte sobre el no un Creador de acciones no es una función. Ver más en la solicitud de extracción .

Intente importar las acciones necesarias como:

import { login, … } from ''../actions/account''

De todos modos, para lo que pruebo, la funcionalidad de la aplicación debería funcionar correctamente, pero mostrando probablemente un montón de advertencias .

Consejo no directamente relacionado : puede usar creadores de acciones directamente en el método connect() como:

import { login, … } from ''../actions/account'' // … export default connect(mapStateToProps,{ login, … })(account);


Redux 3.7.1 acaba de lanzarse para solucionar este problema. PR mencionado por @Lionel T ahora se revierte.


Resolví el problema de una manera simple. Mi problema era que estaba exportando los tipos de acción en action.js (donde exporto mis creadores de acciones). Así que acabo de crear otro archivo llamado actionTypes.js y los puse allí e importé dentro de actions.js

Lo único que tienes que exportar dentro de tus acciones es tu creador de acciones.


prueba esto

import { bindActionCreators } from ''redux''; import {action1,action2,action3,action4} from ''../actions''; function mapDispatchToProps(dispatch) { return bindActionCreators({action1,action2,action3,action4}, dispatch); } export default connect(mapStateToProps,mapDispatchToProps)(ComponentName);