Вызвать диспетчерскую функцию для Redux из строковой переменной - PullRequest
1 голос
/ 21 января 2020

У меня есть компонент, который повторно используется по разным причинам. Из компонента я обновляю разные части магазина на основе параметра 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))
});
}

Это нижняя часть файла. Я знаю, что это работает, не пытаясь использовать строковую переменную в качестве действия отправки. Если я заменю storeName на updateAssignedListingLeads, то это сработает.

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

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

Любая помощь будет принята с благодарностью. Спасибо!

Ответы [ 3 ]

0 голосов
/ 21 января 2020

Хорошо, поэтому мне пришлось импортировать его по-другому и добавить в eval, например:

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

const storeName = eval(Update['update' + group.charAt(0).toUpperCase() + group.slice(1)]);
0 голосов
/ 21 января 2020
If you want to make your function dynamic and want's to dispatch.

Then you need to create one action for that. 

which is return type and payload. 

How redux works is you return type and payload and reducer changes your state as per that.

Create one action which return type and payload and reducer for that.

So, you can map your storeName function and response in your redux store.
0 голосов
/ 21 января 2020

Вы используете Connect API в своем приложении для соединения состояния избыточности с реагировать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...