React中的组件

组件


  • react 当中的组件:状态组件与无状态组件(函数组件)

无状态组件


  • 组件的名字首字母要大写。函数的名字即是组件的名字,函数的返回值即是组件的内容
  • 返回的内容有且只能有一个根元素
  • 必须要有return
实例说明
<div id="root"></div>

<script type="text/babel">
    /* react当中的组件:状态组件与无状态组件(函数组件)
    * 组件的名字首字母要大写。函数的名字即是组件的名字,函数的返回值即是组件的内容。
    * 返回的内容有且只能有一个根元素。
    * 必须要有return
    **/
    function My() {
     
     
        return (
            <div>My 组件</div>
        );
    }

    // 双标签
    // ReactDOM.render(<My></My>, document.querySelector("#root"));
    // 单标签
    ReactDOM.render(<My/>, document.querySelector("#root"));
</script>
实例说明重复使用多个组件
<div id="root"></div>

<script type="text/babel">
    function My() {
     
     
        return (
            <div>My 组件</div>
        );
    }

    // 使用多个组件
    ReactDOM.render((
        <div>
            <My></My>
            <My></My>
        </div>
    ), document.querySelector("#root"));
</script>
无状态组件属性是不允许被修改
<div id="root"></div>

<script type="text/babel">
    function My(props) {
     
     
        // 属性是不允许被修改
        // props.age = 13;
        return (
            <div>my组件{
     
     props.age}</div>
        )
    }

    ReactDOM.render((
        <My age={
     
     12}></My>
    ), document.querySelector("#root"))
</script>
无状态组件单击 h2 标签显示隐藏实例
  • 判断布尔值,通过三元表达式,单击 h2 标签显示隐藏
<div id="app"></div>

<script type="text/babel">

    const arr = ['G', 'M', 'L'];
    let visible = true;

    // 无状态组件 List
    const List = (props) => {
     
     
        // console.log(props);
        // props 接收父组件传递过来的值
        return (
            <ul style={
     
     {
     
     display: visible === true ? 'block' : 'none'}}>
                {
     
     
                    props.array.map((item, index) => {
     
     
                        return (
                            <li key={
     
     index}>{
     
     item}</li>
                        )
                    })
                }
            </ul>
        )
    };

    // 无状态组件 App
    const App = () => {
     
     
        return (
            <div>
                <h2 onClick={
     
     () => {
     
     
                    visible = !visible;
                    render();
                }}>显示隐藏</h2>
                <List array={
     
     arr}></List>
            </div>
        )
    };

    function render() {
     
     
        ReactDOM.render(<App/>, document.querySelector('#app'));
    }

    render();
</script>
无状态组件渲染对象
  • 转换为数组,然后再进行渲染
<div id="app"></div>

<script type="text/babel">

    const obj2 = {
     
     a: 'G', b: 'M', c: 'L'};

    // class 组件 App
    const App = (props) => {
     
     
        return (
            <ul>
                {
     
     
                    Object.values(props.obj).map((item) => {
     
     
                        return (
                            <li key={
     
     item}>{
     
     item}</li>
                        )
                    })
                }
            </ul>
        )
    };

    function render() {
     
     
        ReactDOM.render(<App obj={
     
     obj2}/>, document.querySelector('#app'));
    }

    render();
</script>

类组件


  • 状态组件是通过class来定义的。需要继承 React.Component 类
  • render 方法返回的内容即是该组件的内容
  • 类的名字即是组件的名字
  • 类组件实例对象内有 4 大常用属性

4 大常用属性

  • props:{}:接收父组件通过属性传递的值
  • context: {}:隔代接收祖组件传递的值
  • refs: {}:获取元素节点,只能在 componentDidMount 获取
  • state: {}:存储数据,并用于更新数据,触发 render 函数
<div id="root"></div>

<script type="text/babel">
    /*
    * 状态组件是通过class来定义的。需要继承 React.Component 类
    * render方法返回的内容即是该组件的内容
    * 类的名字即是组件的名字
    * */
    class My extends React.Component {
     
     
        /*
        * constructor 构造函数接收 2 个参数,
        * 第 1 个参数:props 对象,接收通过父组件通过属性传递的值
        * 第 2 个参数:context 对象,接收上下文环境传递的值
        * 
        **/
        constructor(props, context) {
     
     
        super(props, context);
        console.log(context === this.context); // true
        }
        
        render() {
     
     
            console.log(this)
            /*
            * props: {}
            * context: {}
            * refs: {}
            * state: {}
            **/
            return (
                <div>我是一个状态组件</div>
            )
        }
    }

    ReactDOM.render((
        <My></My>
    ), document.querySelector("#root"));
</script>

猜你喜欢

转载自blog.csdn.net/weixin_45757442/article/details/104644809