首页 > 解决方案 > 从字符串变量调用 Redux 的调度函数

问题描述

我有一个因各种原因而被重用的组件。从组件中,我根据 url 参数更新商店的不同部分。我在尝试根据传递的字符串调用调度函数时遇到问题。这是我的导入:

import {updateUnassignedListingLeads, updateAssignedListingLeads} from "../../actions";

然后我的代码调用调度。如果我将 updateAssignedListingLeads 放在 storeName 所在的位置,它就可以工作。我还检查了输入的 url 是否正确。它说它不是一个函数。

reloadFilteredListingLeads = () =>{

let curr = this
var url = this.removeParameter()
const parsed = queryString.parse(this.props.location.search);
let column = parsed.column
let order = parsed.order
let term = parsed.term
let filters = parsed.filters
let group = parsed.group


const vals = {
  column: column,
  order: order,
  filters: filters,
  term: term
};

let strip = url.replace("/", "");
const storeName = eval('update' + group.charAt(0).toUpperCase() + group.slice(1));

axios.post('/filtered-' + strip, vals, headers).then(response => {
  curr.props.dispatch(storeName(response.data))
});
}

这是文件的底部。我知道它可以在不尝试使用字符串变量作为调度操作的情况下工作。如果我用 updateAssignedListingLeads 替换 storeName ,那么它可以工作。

const mapStateToProps = (state) =>{
  return {
    app: state.app,
  }
}

export default withRouter(connect(mapStateToProps)(ListingCoordinatorDetail));

任何帮助将不胜感激。谢谢!

标签: javascriptreactjsfunctionredux

解决方案


好的,所以我必须以不同的方式导入它并将其添加到 eval 中,如下所示:

import * as Update from '../../actions';

const storeName = eval(Update['update' + group.charAt(0).toUpperCase() + group.slice(1)]);

推荐阅读