尝试将价值保存到Redux商店-无法调度

时间:2019-05-30 19:24:00

标签: reactjs redux

我试图在用户输入文本进行搜索时将值保存到redux存储。

经过编辑以包含我的完整导入列表

import React, { Component } from 'react';
import axios from 'axios';
import API from './API';
import { connect } from "react-redux";
import searchSave from '../actions/search'
import {bindActionCreators} from 'redux'
const format = require('string-format')

class Search extends Component {
...

   searchForText = (text) => {
    console.log("user stopped typing");
    console.log(text);
    this.props.searchSave(text);
  }

...
}

const mapStateToProps = (state) => {
  return {
    oidc: state.oidc,
    search: state.searchtext,
  };
};

function mapDispatchToProps(dispatch) {
  let actions = bindActionCreators({ searchSave });
  return { ...actions, dispatch };
}


export default connect(mapStateToProps, mapDispatchToProps)(Search)

我的reducer看起来像这样,并且在我的CombineReducers函数中的其他位置:

import Actions from '../actions/search.js'

export default (state = "", action) => {
      switch (action.type) {
        case Actions.SEARCH:
        return {searchtext: action.payload}
      }
      return state;
    };

我收到错误消息“ TypeError:Dispatch不是函数”-但从理论上讲,分发应该由bindActionCreators约束吗?

我已经搜索了这个确切的错误,但似乎与我的具体情况无关。

我假设我在mapStateToProps或reducer中做错了什么?

我对redux还是很陌生,但仍然感到有些困惑。

2 个答案:

答案 0 :(得分:0)

您需要将dispatch函数作为第二个参数传递给bindActionCreators

function mapDispatchToProps(dispatch) {
  return bindActionCreators({ searchSave }, dispatch);
}

您可以在此处查看相关文档:https://react-redux.js.org/using-react-redux/connect-mapdispatch

如果您打算在返回的道具中也包含dispatch(对我来说似乎是反模式,但我不是专家),则您的原始代码可以在{上添加第二个参数{1}}:

bindActionCreators

答案 1 :(得分:0)

好像您缺少连接的导入,以及mapDispatchToProps中的某些内容。我也不相信在这种情况下您需要bindActionCreators:

my_list <- list(data_frame_1,data_frame_2)
my_list <- setNames(my_list,paste0("data_frame_",1:2))