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);