2015-09-06 283 views
2

我正在与ReactJS(有点Facebook)聊天,并且我创建了与ReactJS聊天室,所以无论何时您点击在线用户ChatBox必须创建,我的问题是,是否有动态创建ReactJS组件可能会将ChatBox添加到div或另一个React元素中?动态创建React元素

这里是我的代码:https://gist.github.com/victorcastillo/2c6cb3af4650729eaa1f

+0

所以,当你点击一个名字你呈现一个新的聊天框? –

+0

@limelights是 –

+0

@limelights问题是,如果我渲染一个新的聊天框,以前的聊天框将消失 –

回答

6

简单的方法是让你的容器仓库给你追加其chatboxes的列表或删除取决于chatboxes如果他们是打开或关闭。

var ChatBox = React.createClass({ 
    render: function() { 
     return <div>a new chatbox!</div>; 
    } 
}); 

var Container = React.createClass({ 
    getInitialState: function() { 
     return { chatboxes: [] }; 
    }, 
    renderChatbox: function() { 
     var cbs = this.state.chatboxes; 
     cbs.push(<ChatBox />); 
     this.setState({chatboxes: cbs}); 
    }, 
    render: function() { 
     return <div>Hello, do you want to open a chatbox <a onClick={this.renderChatbox}>click here</a> 
     {this.state.chatboxes} 
     </div>; 
    } 
}); 

React.render(<Container name="World" />, document.body); 

的答案扩展了一下,假设你不使用通量分布图则,以便容器知道一个客舱已经被关闭,你将不得不从容器到各传递一个回调客舱。

+0

谢谢如此多的答案,你是对的,我没有使用Flux模式,顺便说一句,你有没有用Django实现Flux? –

+0

是的。有什么需要帮助的吗? –

+0

如果你有一个关于带Django的Flux的例子,将会非常有趣,可以分享一下:D –

2

所以每当你点击一个在线用户客舱必须创建

当在线用户字形用户点击这应该触发状态变化 - 你会被保留跟踪打开的聊天窗口。状态改变将触发一个周期。在你的渲染函数中,你必须决定如何以及在哪里调用和放置你的聊天窗口,基于有多少个开放的(状态变量)。这些应该是React组件,你可以通过/注入函数和Id作为道具。

这就是没有代码示例的答案。希望能帮助到你。

1

是的,你可以。一个DIV,你只是做平常

React.render(
    <ChatBox />, 
    document.getElementById('content') 
); 

您可以通过一个反应类定义(即客舱变量),或在财产react factory。稍后可以生成该组件的实例并将其添加到视图中的某个位置。将其添加到视图最简单的方法是更改​​children of a Container type of component

codepen(ES6语法)示例