Sto tentando di inviare un'azione da un clic del pulsante.Azione di invio React-Redux dal componente
Ho creato il mio componente. Lo collego al negozio che viene trasmesso al componente da un Provider. Ma ottengo un errore:
Uncaught TypeError: this.doSearchClick is not a function
ho i miei importazioni:
import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux';
import action_doSearch from '../../actions/searchActions'
La mia componente:
class SearchForm extends React.Component {
constructor(props, doSearchClick) {
super(props);
this.search = this.search.bind(this);
this.doSearchClick = doSearchClick;
}
search() {
this.doSearchClick('bla bla from search');
}
render() {
return(
<div>
<button onClick={this.search}>Search</button>
</div>
);
}
}
Non sono sicuro se questo è richiesto:
SearchForm.propTypes = {
doSearchClick: PropTypes.func.isRequired
};
Infine il materiale connect
:
const mapStateToProps = (state) => {
return {
state
}
};
const mapDispatchToEvents = (dispatch) => {
return {
doSearchClick: (searchCriteria) => {
dispatch(action_doSearch(searchCriteria));
}
};
};
const SearchFormConnected = connect(
mapStateToProps,
mapDispatchToEvents
)(SearchForm);
Al livello superiore passo il negozio lungo via Provider:
import { Provider } from 'react-redux'
const finalCreateStore = compose(
applyMiddleware(
middleware,
thunk
),
DevTools.instrument()
)(createStore);
const store = finalCreateStore(reducer);
ReactDOM.render(
<Provider store={store}>
....
Ho anche provato a raggiungere questo accedendo al negozio di via contesto (non ha funzionato e potrebbe essere deprecato) e anche usando l'attributo @connect
(mi ha dato un errore simile).
Il secondo parametro del costruttore è 'context', non' doSearchClick'. Se hai mappato correttamente dovrebbe essere disponibile a 'this.props.doSearchClick', sebbene questo sia un nome strano per un'azione. –
È un nome fuorviante. Principalmente un risultato di me che copia da tante fonti diverse e non capisco cosa sta succedendo. Probabilmente dovrebbe essere chiamato dispatchSearchAction ... – David