【发布时间】:2020-05-20 07:57:32
【问题描述】:
我有一个 React 上下文,它为子组件提供“项目”信息,我希望保留与包含在上下文类中的项目数据相关的所有内容。这方面的一个示例是从服务器检索项目信息的“refreshProject”函数。挑战在于:如何将作为 URL 参数的 projectID 传递到上下文类中?在下面的代码中,我目前是把它传入refresh函数本身,这意味着所有想要调用refreshProject的子组件都需要从URL中拉取ID,比较笨拙。我可以想到几种方法,但我很好奇这里的最佳实践是什么。
这是包含在 URL 中的项目 ID 的包装路由:
<Switch>
[other routes here]
<ProjectContextProvider>
<AuthenticatedRoute path="/project/:id" exact component={Project} props={childProps} />
</ProjectContextProvider>
</Switch>
ProjectContextProvider 类看起来像:
import React, { Component, createContext } from 'react';
import { API } from '../Services'
export const ProjectContext = createContext();
export class ProjectContextProvider extends Component {
constructor(props) {
super(props);
this.refresh = this.refresh.bind(this);
this.state = {
project: null,
refreshProject: this.refresh
}
}
// This is what I have
refresh(projectID) {
API.getProject(projectID).then(project => {
this.setState({ project });
});
}
// This is what I want
// refresh() {
// API.getProject(this.projectID).then(project => {
// this.setState({ project });
// });
// }
render() {
return (
<ProjectContext.Provider value={{...this.state}}>
{this.props.children}
</ProjectContext.Provider>
);
}
}
【问题讨论】:
标签: javascript reactjs react-context