zoukankan      html  css  js  c++  java
  • 【JAVASCRIPT】React学习-巧用 props 的 children 属性实现内容填充

    背景

    平常写组件,经常遇到需要获取内容放入组件内部的情形。

    实现方法

    我们有两种实现方式

    1. 自定义 props

    render 的时候通过获取 this.props.content 填充到组件内部

    const content = (<ul><li><span>分析1<span></li><li><span>分析1<span></li></ul>);
    <Panel content={content} />
    
    render () {
        return (<div>
            {this.props.content}
        </div>);
    }
    
    

    2. 利用 props 的 children

    一般 props 是与用户定义的组件一一对应,但有一个例外 children ,表示组件内部的所有子节点。我们可以利用这个 props 属性,省略自定义content属性,直接获取this.props.children填充入组件。

    这种方法的好处在于层级关系明显,因为内部节点有时候会很复杂,如果用自定义props属性,没法很快看清楚节点之间的包含关系。
    注意点:
    this.props.children 的值有三种可能,处理 this.props.children 的时候要注意判定:

    • 1) 如果当前组件没有子节点,是 undefined ;
    • 2)如果有一个子节点,数据类型是 object ;
    • 3)如果有多个子节点,数据类型就是 array 。
    <Panel>
           <ul>
                  <li><span>分析1<span></li>
                  <li><span>分析1<span></li>
           </ul>
    </Panel>
    
    
    render () {
        return (<div>
            {this.props.children}
        </div>);
    }
    

    升级版,采用React.Children.map避免掉入this.props.children的坑

    <Panel>
            <span>分析1<span>
            <span>分析1<span>
    </Panel>
    
    render() {
    
        return (<div>
            <ul>
            {
                React.children.map(this.props.children, (child)=>{
                    return (<li>{child}</li>);
                });
            }
            </ul>
        </div>);
    }
    
    

    React.children 的方法

    官方文档: https://facebook.github.io/react/docs/react-api.html#react.children.map

    • React.Children.map(children, function[(thisArg)]) 返回处理后的节点array
    • React.Children.forEach(chidlren, function[(thisArg)]) 不返回处理后的节点array,仅遍历节点,多用于处理数据!!!!
    • React.chidlren.count(children) 返回children个数
    • React.Children.only(children) 仅接受单个节点,超过一个报错
    • React.Chidlren.toArray(children) 把dom节点数组话,多用于render时slice节点
  • 相关阅读:
    枚举类
    泛型数组列表
    方法参数
    给一个数字和列表,判断列表中是否存在两个元素之和等于这个数字,并好之两个数的坐标
    selenium.common.exceptions.ElementNotVisibleException: Message: element not interactable报错
    python-selenium提供的execute_script调用js操作
    xlrd读取excel数据封装
    0531-练习题 os.system
    0528 文件操作习题
    05/17
  • 原文地址:https://www.cnblogs.com/huxiaoyun90/p/6549217.html
Copyright © 2011-2022 走看看