React:仅当子组件将渲染时才渲染父组件
React: Render parent component only if children will render
我对如何在React中处理这种情况感到困惑。
我在一组选项卡中有一些图表组件。图表是否呈现取决于其权限道具。我们检查用户是否有权访问该图表,如果没有,则不进行渲染。很简单。
现在,我被要求在没有子图表具有权限的情况下隐藏父选项卡,即如果没有子图表进行渲染,则完全隐藏选项卡。
现在,我想在React中正确地做到这一点,这样我就明白了数据应该从父级流到子级——父级应该决定子级是否渲染。但权限ID附在每个儿童图表上——我需要获得每个权限,检查它们,只有在授权访问儿童的情况下才能呈现。但那样的话,数据不是从孩子流向父母吗?
非常感谢任何朝着正确方向的鞭策。
这是我的看法:
根据React
原则,您的数据应该从父级流向子级。你的父母应该是聪明的组成部分,做出决定,而孩子应该永远是愚蠢的。
因此,你的问题的解决方案如下。遵循此流程
以下是您的数据应遵循的层次结构:
TABGROUP -> TAB(s) -> CHART(s)
每个选项卡都应该包含一个要渲染的图表列表。每个图表都应该采用适当的道具进行渲染。
现在,在将要呈现的图表列表发送到每个选项卡之前,您应该检查是否允许绘制至少一个图表。
让我们考虑一下您的数据存储返回JSON
(如果没有,您可以将数据重组为类似的原理)。您应该在渲染之前获取数据(通过维护状态,如果您不确定该做什么,可以查找一些AJAX示例)。
var data = {
'tab1': [
{
'id': 'chart1',
'permission': true,
'data': { ... }
},
...
],
'tab2': [
{
'id': 'chartn',
'permission': false,
'data': { ... }
},
...
],
...
}
现在让我们试着如下过滤数据,
for (var tab in data) {
data[tab] = data[tab].map(function(chart) {
return chart.permission === true;
});
if (data[tab].length < 1) {
delete data[tab];
}
}
现在我们已经过滤了数据,让我们呈现我们的组件,
// the variable was "data"
<TabGroup>
{
Object.keys(data).map(function(tab, i) {
// tab is a list
return <Tab key={i} charts={tab} />;
})
}
</TabGroup>
现在在您的Tab
组件中,
// incoming prop was charts, so in your render function
<div>
this.props.charts.map(function(chart, i) {
// chart is a JSON object as above
return <Chart key={i} chartData={chart} />;
});
</div>
最终,您可以在Chart
组件中处理chartData。
相关文章:
- React重新渲染但未显示正确的组件
- React组件等待所需道具进行渲染
- 如何在react js中将值从一个组件发送到另一个组件
- React Native通过Navigator将用户输入数据传递到选项卡栏IOS中的组件
- React组件-设置页面标题
- 为react组件传递道具的最佳方式
- react组件中的绑定方法
- 如何在react js中移动第二个组件
- 如何在react路由器的组件中使用参数
- React+Redux性能优化与组件ShouldUpdate
- React-将jSON数据传递给子组件的子组件
- React js更改状态不会更新组件
- 加载服务器端渲染的React组件后执行脚本
- React ClickDrag子组件回调
- 如何在渲染函数中检查 react 中子组件的状态
- 以最封装的方式封装/封装ScalaJS react js组件(react stick)
- bind():您正在将一个组件方法绑定到该组件.React会自动为您执行此操作
- 如何将值从父组件传递到子组件(react)
- 将函数从HOC传递到组件(React, React native)
- 根据屏幕大小以不同的顺序呈现组件(React)