reactjs - 与孙组件共享 React 组件道具
问题描述
我正在努力弄清楚如何与 react/typescript 中组件的孙子共享道具。为什么构造函数道具被覆盖?
class Resource extends Component<IResourceProps, IResourceState> {
state:IResourceState = {
}
_finder: new this.props.finder({api: this.props.api})
render() {
return (
<div>
<Switch>
<Route path={this.props.path} component={() => {return this._finder}} />
</Switch>
</div>
)
}
}
export default Resource;
class UserFinder extends React.Component<IResourceFinderProps, IResourceFinderState> implements IResourceFinder {
_data: any[] = []
load = (response: QueryResponse): void => {
this._data = response.records;
}
constructor(props:IResourceFinderProps) {
super(props);
}
componentDidMount() {
this.props.api.query({ //<-------- this.props.api is undefined! Why?
page: 0,
pageSize: 100
}, (response:QueryResponse) => {
this.load(response);
})
}
render() {
const columns = [
{
title: 'Name',
dataIndex: 'firstName',
key: 'firstName'
}
];
return (
<div>
<Table columns={columns} rowKey="userId" dataSource={this._data} />
</div>
)
}
}
export default UserFinder
应用程序.js
<Route path="/users" finder={UserFinder} api={this.api} />
本质上,我想与 Route 的所有子节点共享 api 属性,而不必分别在每个子节点上显式设置它。也许,另一种解决方案可能是以某种方式让孩子参考祖父母。我有哪些选择?
解决方案
首先,如果您只想通过路由器传递道具,请使用道具render
而不是component
. 例如:
<Route path={this.props.path} render={(props) => <Component {...props} additionalProps={...} />} />
如果你真的想在不传递 props 的情况下共享状态,你将需要像全局状态这样的东西。在那里,您有不同的选择。
推荐阅读
- macos - windows操作系统下下载的Jenkins插件,MAC操作系统也能用吗?
- php - 我正在尝试在提交表单之前添加一个选中的属性,并使用 laravel 刀片模板让点击的收音机保持粘性
- ios - 年龄较大的孩子(9 岁以上的孩子)需要什么样的 iOS 家长门
- python - 我正在尝试增加 Python 中原始流的音量(幅度)
- angular - 角度捕获页面截图并下载正文中包含图像的电子邮件消息文件
- apache-kafka - 在使用相同 group_id 的 kafka 消费者中使用分配而不是订阅时是否有影响?
- javascript - 显示:表格单元格未与行号对齐
- javascript - 使用捕获属性限制文件输入的视频持续时间
- docusignapi - 访问 create_template_view api 时出现 INVALID_REQUEST_BODY 错误
- routes - Heremaps 计算路由 API 上的错误 414