我试图在用户输入文本进行搜索时将值保存到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还是很陌生,但仍然感到有些困惑。
答案 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))