我在创建React应用程序时遇到了一些问题。这里的问题是:在组件类别之外反应更新组件类别
import React from 'react';
const VIEW_MAIN = 0;
const VIEW_SUB = 1;
const VIEWS = {};
VIEWS[VIEW_MAIN] = (<ViewMain someProps={...} />);
VIEWS[VIEW_SUB] = (<ViewSub someProps={...} />);
const AppContent = React.createClass({
render() {
let renderDOM = null;
if(this.props.view === VIEW_MAIN) {
renderDOM = VIEWS[VIEW_MAIN];
}
else {
renderDOM = VIEWS[VIEW_SUB];
}
return (
<div id="ViewContainer">
{renderDOM}
</div>
);
}
});
你可以看到,“意见”常数变量包含2次,VIEW_MAIN和VIEW_SUB。每个视图都是React Component。
这两个组件都具有相同的名为“someProps”的属性。现在,这是问题。我想将“AppContent”组件的属性添加到两个React组件中,但当然,这是不可能的,因为它们不在类定义之内。
所以将它们移到类定义中,问题是我不知道应该放在哪里。我应该把“渲染”方法?我认为这是个坏主意,因为渲染方法会执行很多次。如果我使用“class”关键字而不是使用createClass,我认为如果定义的“VIEWS”常量变量代码位于构造函数函数(constructor())的内部,但我不喜欢使用它们,则可能会发生这种情况。
我输入这样的代码暂时:
const AppContent = React.createClass({
_initViews() {
if(typeof this.VIEWS === 'undefined') {
this.VIEWS = {};
this.VIEWS[VIEW_MAIN] = (<ViewMain someProps={this.props.some} />);
this.VIEWS[VIEW_SUB] = (<ViewSub someProps={this.props.some} />);
},
render() {
this._initViews();
...
}
});
我添加_initialViews
方法类的里面,当渲染调用执行。它工作正常,但问题总是在渲染AppContent
组件时执行“_initViews”方法。我只想执行一次,我认为使用这样的反应是不好的主意。
我应该只使用Class关键字吗?据我所知,React里面有“setProps”方法,但现在不推荐使用,我也认为使用setProps方法是个坏主意。
有没有一种方法,以良好的做法或更好的解决方案我在想什么?如果是这样,它将非常感激它给我的建议。
谢谢你的好解决方案! – modernator