来自组件的React-Redux调度操作

时间:2016-02-24 12:02:45

标签: reactjs redux react-redux

我试图通过点击按钮发送动作。

我已经创建了我的组件。我将它连接到由提供商传递给组件的商店。但是我收到了一个错误:

  

未捕获的TypeError:this.doSearchClick不是函数

我有我的进口商品:

import React, { Component, PropTypes } from 'react';
import { connect } from 'react-redux';
import action_doSearch from '../../actions/searchActions'

我的组件:

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

不确定是否需要:

SearchForm.propTypes = {
  doSearchClick: PropTypes.func.isRequired
};

最后是connect的东西:

const mapStateToProps = (state) => {
  return {
    state
  }
};

const mapDispatchToEvents = (dispatch) => {
  return {
    doSearchClick: (searchCriteria) => {
      dispatch(action_doSearch(searchCriteria));
    }
  };
};
const SearchFormConnected = connect(
  mapStateToProps,
  mapDispatchToEvents
)(SearchForm);

在顶层我通过提供商传递商店:

import { Provider } from 'react-redux'

const finalCreateStore = compose(
   applyMiddleware(
      middleware,
      thunk
   ),
   DevTools.instrument()
)(createStore);

const store = finalCreateStore(reducer);

ReactDOM.render(
  <Provider store={store}>
    ....

我还尝试通过上下文访问商店(没有工作并且可能已弃用)以及使用@connect属性(给我类似的错误)来实现这一点。

2 个答案:

答案 0 :(得分:1)

doSearchClick将在props对象中传递。因此,您需要输入props.doSearchClick才能访问它。

答案 1 :(得分:0)

此:

SearchForm.propTypes = {
   doSearchClick: PropTypes.func.isRequired
};

意味着您的SearchForm组件希望将名为doS​​earchClick的函数作为其父亲的道具。

如果父亲通过这个道具,孩子应该通过

访问它
props.doSearchClick