React技巧2(避免无意义的父节点)

本教程总共5篇,每日更新一篇,请关注我们!你可以进入历史消息查看以往文章,也敬请期待我们的新文章!

1.React 技巧1(状态组件与无状态组件的使用) ----2018.01.04

2.React 技巧2(避免无意义的父节点)----2018.01.05

3.React 技巧3(如何优雅的渲染一个List)----2018.01.06

4.React 技巧4(如何处理List里面的Item)----2018.01.07

5.React 技巧5(TodoList实现)----2018.01.08

开发环境:Windows 8,node v8.9.1,npm 5.5.1,WebStorm 2017.2.2

我们在开发的时候经常会遇到这样的情况?

比如说,我把

<i className="bd_logo1"/>
这是{this.props.title}

把这两行代码分开,分别放到两个 div.top 里

<div className="top">
    
</div>
<div className="top">
    <i className="bd_logo1"/>
</div>
<div className="top">
    这是{this.props.title}
</div>

然后我想把这块代码,做成组件!

新建 SecondsTop.jsx组件

直接把代码放进来,会报错,我们必须把他放到一个标签里.

比如再给它们放到一个div父标签中!

import React from 'react';

const SecondsTop = ({title}) =>
    <div>
        <div className="top">
            <i className="bd_logo1"/>
        </div>
        <div className="top">
            这是{title}
        </div>
    </div>
;

export default SecondsTop;

我们在Seconds.jsx 引入 SecondsTop.jsx 组件

再浏览器中查看!

你会发现多了一层,无意义的div父标签!毫无意义,还影响性能(很小)

那我们如何避免呢!

改造下SecondsTop.jsx 组件,直接返回一个数组

import React from 'react';

const SecondsTop = ({title}) => [
    <div className="top">
        <i className="bd_logo1"/>
    </div>,
    <div className="top">
        这是{title}
    </div>
];
export default SecondsTop;

再看下浏览器

那个无意义的div父标签,就不需要了!

但是浏览器会报错!

我们只需要给他加上KEY即可,再次改造!

import React from 'react';

const SecondsTop = ({title}) => [
    <div className="top" key="top1">
        <i className="bd_logo1"/>
    </div>,
    <div className="top" key="top2">
        这是{title}
    </div>
];
export default SecondsTop;

再看下浏览器

一切正常,OK!

在开发中经常会遇到,大家要灵活应用,该写法藐视再react16以上版本中才有!

本文完 

禁止擅自转载,如需转载请在公众号中留言联系我们!

感谢童鞋们支持!

如果你有什么问题,可以在下方留言给我们!

来源:React技巧2(避免无意义的父节点)-留客客-获客营销saas系统

您可以通过在 `TreeSelect` 组件中设置 `treeCheckStrictly` 属性为 true,并在 `onChange` 事件中对选中的节点进行处理,以实现选择显示父节点的功能。具体实现方式如下: ```jsx import { TreeSelect } from 'antd'; const treeData = [ { title: 'Node1', value: '0-0', children: [ { title: 'Child Node1', value: '0-0-0', }, { title: 'Child Node2', value: '0-0-1', }, ], }, { title: 'Node2', value: '0-1', children: [ { title: 'Child Node3', value: '0-1-0', }, { title: 'Child Node4', value: '0-1-1', }, ], }, ]; function TreeSelectWithParent(props) { const { onChange, ...restProps } = props; const handleTreeSelectChange = (value, label, extra) => { // 如果选中的节点是父节点,则将其子节点也一并选中 if (extra.checkedNodes.some(node => node.isLeaf === false)) { const checkedValues = extra.checkedNodes .filter(node => node.isLeaf) .map(node => node.value); onChange(checkedValues, label, extra); } else { onChange(value, label, extra); } }; return ( <TreeSelect treeData={treeData} treeCheckable={true} treeCheckStrictly={true} onChange={handleTreeSelectChange} {...restProps} /> ); } ``` 在上述代码中,我们定义了一个名为 `TreeSelectWithParent` 的组件,该组件通过设置 `treeCheckStrictly` 属性为 true,实现了只能勾选叶子节点的功能。同时,在 `onChange` 事件中,我们对选中的节点进行了处理,如果选中的节点是父节点,则将其子节点也一并选中。最后,我们将处理后的值传递给原本的 `onChange` 事件处理函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值