2016-04-27 39 views
0

我在创建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方法是个坏主意。

有没有一种方法,以良好的做法或更好的解决方案我在想什么?如果是这样,它将非常感激它给我的建议。

回答

2

你应该实现stateless functions。填写VIEWS与功能,并调用它在你的应用程序被替换的东西像{renderDOM}<renderDOM someProps={this.props.some}/>

为了避免组件渲染多次使用shouldComponentUpdate。否则,即使组件重新呈现多次,如果生成的虚拟DOM与浏览器DOM一致,那么页面上将不会刷新这些组件。