【发布时间】:2020-06-09 04:46:12
【问题描述】:
在我的反应应用程序中,我有一个父子组件。在我的父组件中,我包含来自子组件的过滤器。无论我从过滤器中选择什么值,我都会将其传递给我的 api 请求参数,该参数在我的 ParentComponent 中的 handleFilterChange 方法下调用。但是,我注意到如果我从 ChildComponent 中选择一个过滤器,它会正确传递,但在选择两个过滤器时,它始终是通过的最新选择的过滤器值。所以,我认为,我需要以某种方式将我以前的状态保存在 handleFilterChange 方法中,但不知道如何实现它。 这是我的代码 sn-p。
ParentComponent.js-
const ParentComponent = props => {
const [filterObj, setFilterObj] = useState({});
const handleFilterChange = filters => {
console.log(filters); // Show only latest selected filter
setFilterObj(filterObj);
//API call which will pass filters in request params
};
return (
<ChildComponent onChange={handleFilterChange} />
);
}
ChildComponent.js
const ChildComponent = props => {
const handleChange = value => {
console.log(values);// Shows all of the selected filters
onChange({
...Object.keys(values).reduce((val, key) => (isEmpty(value[key]) ? val : { [key]: value[key] }), {}),
});
};
return (
<Filter onFilterChange={handleChange} />
);
}
例如,我有过滤器 A 和过滤器 B。第一次,当我选择过滤器 A 时,我看到参数值有过滤器 A,并且同样被传递给我的 ParentComponent。但是,当我在选择过滤器 A 后选择过滤器 B 时,它只会在 handleFilterChange 方法中将过滤器 B(最新选择的值)传递给我的 ParentComponent。因此,handleFilterChange 方法中的过滤器参数将只有一个对象,即过滤器 B。我希望它具有过滤器 A 和过滤器 B。 单独选择过滤器时,我的代码工作正常,但只有当我尝试同时选择两个过滤器时,它才不起作用。这里的任何建议都会有帮助。 请注意,参数、过滤器和值都是对象。
【问题讨论】:
-
values来自哪里?是否在ChildComponent渲染中的任何地方使用过?
标签: reactjs react-hooks