美文网首页
无状态功能性组件-Stateless Functional Co

无状态功能性组件-Stateless Functional Co

作者: 灯火葳蕤234 | 来源:发表于2019-05-03 16:16 被阅读0次
    import React, { Component } from 'react';
    class NavBar extends Component {
        render() { 
            return (
            <nav className="navbar navbar-light bg-light">
                <a className="navbar-brand" href="#">
                    Navbar{" "}
                    <span className="badge badge-pill badge-secondary">
                        {this.props.totalCounters}
                    </span>
                </a>
            </nav>);
        }
    }
    export default NavBar;
    

    我们看到 NavBar 中,它是一个只有返回方法的组件,这里面没有事件句柄,没有中间方法去计算什么,只有一个单一的返回方法,同时也没有 state,它只从 props 获取数据。
    在这种情况下,我们可以将这个组件转换为,常说的无状态功能性组件,我们不再使用类去定义这个组件。

    import React, { Component } from 'react';
    //Stateless Functional Component
    const NavBar = (props) => {
        return (
            <nav className="navbar navbar-light bg-light">
                <a className="navbar-brand" href="#">
                    Navbar{" "}
                    <span className="badge badge-pill badge-secondary">
                        {props.totalCounters}
                    </span>
                </a>
            </nav>);
    };
    export default NavBar;
    

    因为不使用带有渲染方法的继承于 Component 的类,而是简单定义一个函数使它但会一个 react 元素,这就是无状态功能性组件。
    同样我们也有创建无状态功能性组件的快捷方式。就像我们用 cc 来创建组件类,我们用 sfc 来创建无状态功能性组件。
    在这里我们可以将 this.props 中的 this 去掉,把 props 作为函数的参数,因为 react 会在运行时将 props 作为实参传入函数中。
    我们还可以使用析构实参的方式简化代码:

    import React, { Component } from 'react';
    //Stateless Functional Component
    const NavBar = ({ totalCounters }) => {
        return (
            <nav className="navbar navbar-light bg-light">
                <a className="navbar-brand" href="#">
                    Navbar{" "}
                    <span className="badge badge-pill badge-secondary">
                        {totalCounters}
                    </span>
                </a>
            </nav>);
    };
    export default NavBar;
    

    这样我们就省略掉了 ‘this.’
    在 counters 组件中使用析构:

    import React, { Component } from 'react';
    import Counter from './counter';
    class Counters extends Component { 
        render() {
            const { onReset, counters, onDelete, onIncrement } = this.props;
            return (<div>
                <button
                    onClick={onReset}
                    className="btn btn-primary btn-sm m-2">Reset</button>
                { counters.map(counter => 
                    <Counter 
                        key={counter.id} 
                        onDelete={onDelete} 
                        onIncrement={onIncrement}
                        counter={counter}/>
                    )}
            </div>);
        }
    }
    export default Counters;
    

    相关文章

      网友评论

          本文标题:无状态功能性组件-Stateless Functional Co

          本文链接:https://www.haomeiwen.com/subject/xuaanqtx.html