React

具有独立功能的UI部件

组件

类式

代码示例:

// src/index.jsx

import React from "react";  // 本体(JSX语法,可省略导入)
import {createRoot} from "react-dom/client";  // 组件渲染到页面上
import Test01 from "./test/Test01";  // 导入组件

createRoot(document.getElementById('root')).render(<Test01/>)  // 向指定标签插入HTML代码(<Test01/>:React自定义标签)
// src/test/Test01.jsx

import React, {Component} from 'react';

export default class Test01 extends Component {  // 必须继承Component,否则就是一个普通的类(export default:导出React类)
    render() {
        return (
            <div>  {/* 标签内注释 */}
                HelloWorld!
            </div>
        );
    }
}

函数式

代码示例:

// src/test/Test01.jsx

export default function Test01() {
    return (
        <div>
            HelloWorld!
        </div>
    )
}
// src/test/Test04.jsx

import React, {Component} from 'react';
import Test05 from './Test05'

export default class Test04 extends Component {
    render() {
        return (
            <div>
                <Test05 title={'时雨'} bg={'gray'} lr={'right'}/>
            </div>
        );
    }
}
// src/test/Test05.jsx

export default function Test05(props) {  // 使用形参来接收
    let {title, bg, lr} = props
    Test05.defaultProps = {background: 'red'}  // 默认值
    Test05.propTypes = {background: bg.string}  // 验证
    console.log(title)
    let obj = {
        background: bg,
        width: '100px',
        position: 'fixed'
    }
    let obj01 = {
        right: 0
    }
    let obj02 = {
        left: 0
    }
    let styleObj = lr === 'right' ? {...obj, ...obj01} : {...obj, ...obj02}
    return (
        <div style={styleObj}>
            HelloWorld!
        </div>
    )
}

内嵌

代码示例:

// src/test/Test01.jsx

import React, {Component} from 'react';

class Foo extends Component {
    render() {
        return (
            <div>Foo</div>
        )
    }
}

function Bar() {
    return (
        <div>Bar</div>
    )
}

export default class Test01 extends Component {
    render() {
        return (
            <div>
                <Foo/>
                <Bar/>
            </div>
        );
    }
}