程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ReactJS两个组件进行通信大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决ReactJS两个组件进行通信?

开发过程中遇到ReactJS两个组件进行通信的问题如何解决?下面主要结合日常开发的经验,给出你关于ReactJS两个组件进行通信的解决方法建议,希望对你解决ReactJS两个组件进行通信有所启发或帮助;

最佳方法取决于您计划如何安排这些组件。现在想到的一些示例场景:

  1. <Filters />@H_607_7@ 是的子组件 <List />@H_607_7@
  2. 这两个<Filters />@H_607_7@和<List />@H_607_7@是一个父组件的孩子
  3. <Filters />@H_607_7@并<List />@H_607_7@完全存在于单独的根组件中。

可能还有其他我没有想到的情况。如果您的不适合这些,请告诉我。以下是一些我如何处理前两种情况的非常粗糙的示例:

场景1

您可以将处理程序从传递<List />@H_607_7@给<Filters />@H_607_7@,然后可以在onChange@H_607_7@事件上调用该处理函数以使用当前值过滤列表。

#1的JSFiddle→

@H_696_38@/** @Jsx React.DOM */ var Filters = React.createClass({ handleFilterChange: function() { var value = this.refs.filterinput.getDOMNode().value; this.props.updatefilter(value); }, render: function() { return <input type="text" ref="filterinput" onChange={this.handleFilterChangE} placeholder="Filter" />; } }); var List = React.createClass({ geTinitialState: function() { return { ListItems: ['Chicago', 'New York', 'Tokyo', 'London', 'San Francisco', 'Amsterdam', 'Hong Kong'], nameFilter: '' }; }, handleFilterupdate: function(filtervalue) { this.setState({ nameFilter: filterValue }); }, render: function() { var displayeditems = this.state.ListItems.filter(function(item) { var match = item.tolowerCase().indexOf(this.state.nameFilter.tolowerCase()); return (match !== -1); }.bind(this)); var content; if (displayeditems.length > 0) { var items = displayeditems.map(function(item) { return <li>{item}</li>; }); content = <ul>{items}</ul> } else { content = <p>No items matching this filter</p>; } return ( <div> <Filters updatefilter={this.handleFilterupdatE} /> <h4>Results</h4> {Content} </div> ); } }); React.renderComponent(<List />, document.body); @H_607_7@

场景2

与方案1类似,但父组件将是将处理程序函数传递给的组件<Filters />@H_607_7@,并将过滤后的列表传递给<List />@H_607_7@。我更喜欢这种方法,因为它使<List />@H_607_7@脱离了<Filters />@H_607_7@。

#2的JSFiddle→

@H_696_38@/** @Jsx React.DOM */ var Filters = React.createClass({ handleFilterChange: function() { var value = this.refs.filterinput.getDOMNode().value; this.props.updatefilter(value); }, render: function() { return <input type="text" ref="filterinput" onChange={this.handleFilterChangE} placeholder="Filter" />; } }); var List = React.createClass({ render: function() { var content; if (this.props.items.length > 0) { var items = this.props.items.map(function(item) { return <li>{item}</li>; }); content = <ul>{items}</ul> } else { content = <p>No items matching this filter</p>; } return ( <div classname="results"> <h4>Results</h4> {Content} </div> ); } }); var ListContainer = React.createClass({ geTinitialState: function() { return { ListItems: ['Chicago', 'New York', 'Tokyo', 'London', 'San Francisco', 'Amsterdam', 'Hong Kong'], nameFilter: '' }; }, handleFilterupdate: function(filtervalue) { this.setState({ nameFilter: filterValue }); }, render: function() { var displayeditems = this.state.ListItems.filter(function(item) { var match = item.tolowerCase().indexOf(this.state.nameFilter.tolowerCase()); return (match !== -1); }.bind(this)); return ( <div> <Filters updatefilter={this.handleFilterupdatE} /> <List items={displayeditems} /> </div> ); } }); React.renderComponent(<ListContainer />, document.body); @H_607_7@

场景3

当组件无法在任何类型的父子关系之间进行通信时,文档建议设置全局事件系统。

解决方法

我刚开始使用ReactJS,但对我遇到的问题有些困惑。

我的应用程序本质上是一个带有过滤器的列表和一个用于更改布局的按钮。目前我使用的三个组成部分:<list />@H_607_7@,< Filters />@H_607_7@和<TopBar />@H_607_7@,现在很明显,当我更改设置,在< Filters />@H_607_7@我想引起一些方法<list />@H_607_7@来更新我的看法。

如何使这三个组件相互交互,或者我需要可以对其进行更改的某种全局数据模型?

大佬总结

以上是大佬教程为你收集整理的ReactJS两个组件进行通信全部内容,希望文章能够帮你解决ReactJS两个组件进行通信所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。