您需要将每个访问类型设置为 prop,以便您可以根据收到的 prop 类型呈现应用程序,最好是 componentDidMount()。然后,您可以拥有一个MasterView,它将接收道具并相应地决定要渲染哪个视图。代码将如下所示:
var MasterView = React.createClass({
var roleType = this.props.role;
render: function() {
if(roleType === 'admin') {
return (
<AdminView />
);
}
});
至于您对实现新功能的关注,您应该将视图和逻辑分解为简单且可重用的组件。例如,您的所有访问类型都可以共享一个公共的<Header /> 和<Footer /> 组件以及<Profile /> <Settings /> 等。请注意,这些可以进一步细分,以便当您对任何组件进行小的更改时它将传播到您的所有观点。类似的原则也适用于您的逻辑。记得保持干燥。
编辑:
假设该应用是为商店制作的。通过该门户显示的所有数据(由组件名称表示)是:
<EmployeeProfile />
<EmployeeSalary />
<BuyerRecords />
<BalanceSheet />
<Inventory />
<Billing />
现在让我们定义每个角色的访问级别:
- 管理员可以访问应用的所有功能。
- 老板可以查看除员工工资以外的所有详细信息。
- Slave 可以访问买方的记录、库存和计费。
- 孩子只能查看库存和计费部分。
现在,将定义这 6 个广泛的组件,并且肯定会包含多个组件。只要确保每当您觉得视图的特定部分将在其他地方使用时,请继续并将其制成一个单独的组件。
最后,角色应该像这样呈现:
var AdminView = React.createClass({
render: function() {
return (
<div>
<EmployeeProfile />
<EmployeeSalary />
<BuyerRecords />
<BalanceSheet />
<Inventory />
<Billing />
</div>
);
}
});
var MasterView = React.createClass({
render: function() {
return (
<div>
<EmployeeProfile />
<BuyerRecords />
<BalanceSheet />
<Inventory />
<Billing />
</div>
);
}
});
var SlaveView = React.createClass({
render: function() {
return (
<div>
<BuyerRecords />
<BalanceSheet />
<Billing />
</div>
);
}
});
var ChildView = React.createClass({
render: function() {
return (
<div>
<Inventory />
<Billing />
</div>
);
}
});
这样你就有 4 个父组件来处理所有的视图。它们由多个组件组成,如果需要进行更改,只需进行一次,它将反映在所有角色中。
如果您决定为每个角色稍微修改<Inventory />,您可以选择根据角色来渲染<Inventory /> 的不同子组件。
去看看这个官方blog post 以及。应该有助于消除任何疑问:)