Я хочу иметь строку запроса, которую можно использовать для фильтрации моих результатов.Всякий раз, когда URL-адрес изменяется, с помощью Redux вызывается действие для загрузки моих данных с заданными фильтрами в URL.
Пример URL выглядит следующим образом:
/trainers?filter=city=Antwerp&firstName=Dax&lastName=Bosch&postalCode=2600&page=1
С этим данным URL myaction.payload
должно выглядеть так:
payload:
filter: "city=Antwerp&firstName=Dax&lastName=Bosch&postalCode=2600"
page: 1
sortField: undefined
sortOrder: undefined
Вот как я сейчас делаю строку запроса
filterAdvancedSearch = (values: FormikValues) => {
updateAdvancedSearchQueryString(this.props, {page: 1, filter: this.filterSearchResults(values)});
};
filterSearchResults = (values: any) => {
let obj: any = {};
Object.keys(values).forEach(
key => values[key].length && (obj[key] = values[key])
);
return obj;
};
Я передаю реквизит и мой объект, который будет использоватьсядля генерации строки запроса.filterSearchResults()
используется для избавления от пустых значений
Как я создаю строку запроса и отправляю ее на свой маршрут:
export function updateAdvancedSearchQueryString<T>(
props: RouteComponentProps,
newValues: any
) {
props.history.push({
pathname: props.location.pathname,
search: queryString.stringify(newValues)
});
}
Я использую строку запроса module from node.js, но из-за того, что у меня есть объект в моем объекте фильтра, мои URL и action.payload
выглядят следующим образом:
/trainers?filter=%5Bobject%20Object%5D&page=1
payload:
filter: "[object Object]"
page: "1"
sortField: undefined
sortOrder: undefined
Как я могу использоватьМодуль querystring, чтобы заставить его работать на вложенном объекте, или как это сделать без использования модуля?