zoukankan      html  css  js  c++  java
  • context的作用

    看下面的一个简单的组件:

    import React from 'react'

    class Sidebar extends React.Component {
    render(){
    return(<div>
    <p>我是Sidebar</p>
    <ul>
    <li>
    <Navbar user={this.props.user}></Navbar>
    </li>
    </ul>
    </div>)
    }
    }

    class Navbar extends React.Component {
    render(){
    return(<div>
    <p>{this.props.user}:Navbar</p>
    </div>)
    }
    }

    class Page extends React.Component {
    render(){
    const user = 'qiqi'
    return(<div>
    <p>我是{user}</p>
    <Sidebar user={user}></Sidebar>
    </div>)
    }
    }
    export default Page

    #############################

    一级一级向下传递数据,浪费性能,而且在Sidebar组件中user并没有什么作用,造成了浪费,所以要进行进一步的优化:利用context,修改如下:

    必须结合prop-types才可以:

    import React from 'react'
    import PropTypes from 'prop-types';
    class Sidebar extends React.Component {
    render(){
    return(<div>
    <p>我是Sidebar</p>
    <ul>
    <li>
    <Navbar></Navbar>
    </li>
    </ul>
    </div>)
    }
    }

    class Navbar extends React.Component {
    static contextTypes = {
    user:PropTypes.string
    }
    render(){
    return(<div>
    <p>{this.context.user}:Navbar</p>
    </div>)
    }
    }

    class Page extends React.Component {
    static childContextTypes = {
    user:PropTypes.string
    }
    constructor(props){
    super(props)
    this.state = {user:'qiqi'}
    }
    getChildContext(){
    return this.state
    }
    render(){
    return(<div>
    <p>我是{this.state.user}</p>
    <Sidebar></Sidebar>
    </div>)
    }
    }
    export default Page

  • 相关阅读:
    reuire代码优化之:r.js
    项目伪模块化开发之:requirejs(AMD)开发
    cookie
    前端构建工具gulpjs的使用介绍及技巧
    js之:漂浮线
    同步对象(Event)
    并发&并行 同步&异步 GIL 任务 同步锁 死锁 递归锁
    进程 线程 threading模块
    认证客户端的链接合法性
    socketserver 模块的构成
  • 原文地址:https://www.cnblogs.com/qiqi105/p/8651002.html
Copyright © 2011-2022 走看看