龙空技术网

React笔记——核心概念:11.组合vs继承

ITCAN 48

前言:

此刻看官们对“jquerysplitpane”都比较珍视,看官们都需要剖析一些“jquerysplitpane”的相关内容。那么小编在网络上网罗了一些关于“jquerysplitpane””的相关资讯,希望同学们能喜欢,大家快快来了解一下吧!

React组合模式强大,推荐使用组合而非继承来实现组件间代码重用。

1、包含关系children prop示例:

function FancyBorder (props) {  return (    <div className={ 'FancyBorder FancyBorder-' + props.color }>      { props.children }    </div>  )} function WelcomeDialog () {  return (    <FancyBorder color="orange" >      <h1 className="Dialog-title">        Welcome      </h1>      <p className="Dialog-message">        Thank you for visiting our spacecraft!      </p>    </FancyBorder>  )} ReactDOM.render(  <WelcomeDialog />,      document.getElementById('root'))
<FancyBorder> JSX 标签中的所有内容都会作为一个 children prop 传递给 FancyBorder 组件。自定义props组件,类似“插槽”
function SplitPane (props) {  return (    <div className="SplitePane">      <div className="Splite-left">        { props.left }      </div>      <div className="Splite-right">        { props.right }      </div>    </div>  )} function Contacts () {  return (    <div>Contact me.</div>  )} function Chat () {  return (    <div>Chat with me.</div>  )} function App () {  return (    <SplitPane      left={        <Contacts />      }      right={        <Chat />      } />  )} ReactDOM.render(  <App />,  document.getElementById('root2'))
可以将任何东西作为props进行传递<Contacts /> 和 <Chat /> 之类的 React 元素本质就是对象(object),所以你可以把它们当作 props,像其他数据一样传递2、特例关系有时,会把一些组件看作其他组件的特殊实例“特殊”组件可以通过 props 定制并渲染“一般”组件WelcomeDialog 可以说是 Dialog 的特殊实例
function Dialog (props) {  return (    <FancyBorder color="orange" >      <h1 className="Dialog-title">{ props.title }</h1>      <p className="Dialog-message">{ props.message }</p>    </FancyBorder>  )} function WelcomeDialog () {  return (    <Dialog title="Welcome"      message="Thank you for visiting our spacecraft!" />  )} ReactDOM.render(  <WelcomeDialog />,  document.getElementById('root3'))
3、组合同样适用于以class形式定义的组件示例:
function Dialog (props) {  return (    <FancyBorder color="orange" >      <h1 className="Dialog-title">{ props.title }</h1>      <p className="Dialog-message">{ props.message }</p>      { props.children }    </FancyBorder>  )} class SignUpDialog extends React.Component {  constructor (props) {    super(props)    this.state = { login: '' }     this.handleChange = this.handleChange.bind(this)    this.handleSignUp = this.handleSignUp.bind(this)  }   handleChange (e) {    this.setState({ login: e.target.value })  }   handleSignUp () {    console.log(`Welcome aboard, ${this.state.login}!`)  }   render () {    return (      <Dialog         title="Mars Exploration Program"        message="How should we refer to you?" >        <input value={ this.state.login } onChange={ this.handleChange } />        <button onClick={ this.handleSignUp }>Sign Me Up!</button>      </Dialog>    )  }} ReactDOM.render(  <SignUpDialog />,  document.getElementById('root4'))

关联文章:React笔记——核心概念:1.Hello WorldReact笔记——核心概念:2.JSX简介React笔记——核心概念:3.元素渲染React笔记——核心概念:4.组件&PropsReact笔记——核心概念:5.State&生命周期React笔记——核心概念:6.事件处理React笔记——核心概念:7.条件渲染React笔记——核心概念:8.列表&KeyReact笔记——核心概念:9.表单React笔记——核心概念:10.状态提升

标签: #jquerysplitpane