【发布时间】:2021-04-20 14:13:51
【问题描述】:
我的应用程序上有一个项目列表,我正在尝试为每个单击创建一个详细信息页面。此外,我没有管理如何使用 useState 和 useEffect 使用 typescript,我可以只使用 componentDidMount 来管理,这不是我的目标。
在我的州,称为MetricState,我有"metrics",我在某些地方看到我也应该在我的州添加"selectedMetric"。我认为这是一个奇怪的解决方案,因为我只想能够通过“在处于状态的指标列表上选择 id x 的指标”的操作来调用调度。
这是代码框,当您单击“详细信息”按钮时,您会看到未打印来自该州的所选指标的名称:https://codesandbox.io/s/react-listing-forked-6sd99
这是我的州:
export type MetricState = {
metrics: IMetric[];
};
调度调用的我的 actionCreators.js 文件
export function fetchMetric(catalog, metricId) {
const action = {
type: ACTION_TYPES.CHOOSE_METRIC,
payload: []
};
return fetchMetricCall(action, catalog, metricId);
}
const fetchMetricCall = (action, catalog, metricId) => async (dispatch) => {
dispatch({
type: action.type,
payload: { metrics: [catalog.metrics.filter((x) => x.name === metricId)] } //contains the data to be passed to reducer
});
};
最后是 MetricsDeatail.tsx 页面,我尝试使用来自路由参数的 id 过滤所选项目:
const metricId = props.match.params.metricId;
const catalog = useSelector<RootState, MetricState>(
(state) => state.fetchMetrics
);
const selectedMetric: IMetric = {
name: "",
owner: { team: "" }
};
const dispatch = useDispatch();
useEffect(() => {
dispatch(appReducer.actionCreators.fetchMetric(catalog, metricId));
}, []);
【问题讨论】:
标签: reactjs typescript react-redux react-hooks