• react组件


    1.函数式组件

            //1.创建函数式组件
            function MyComponent(){
                console.log(this); //此处的this是undefined,因为babel编译后开启了严格模式
                return <h2>我是用函数定义的组件(适用于【简单组件】的定义)</h2>
            }
            //2.渲染组件到页面
            ReactDOM.render(<MyComponent/>,document.getElementById('test'))
            /* 
                执行了ReactDOM.render(<MyComponent/>.......之后,发生了什么?
                        1.React解析组件标签,找到了MyComponent组件。
                        2.发现组件是使用函数定义的,随后调用该函数,将返回的虚拟DOM转为真实DOM,随后呈现在页面中。
            */

    2.类式组件

            //1.创建类式组件
            class MyComponent extends React.Component {
                render(){
                    //render是放在哪里的?—— MyComponent的原型对象上,供实例使用。
                    //render中的this是谁?—— MyComponent的实例对象 <=> MyComponent组件实例对象。
                    console.log('render中的this:',this);
                    return <h2>我是用类定义的组件(适用于【复杂组件】的定义)</h2>
                }
            }
            //2.渲染组件到页面
            ReactDOM.render(<MyComponent/>,document.getElementById('test'))
            /* 
                执行了ReactDOM.render(<MyComponent/>.......之后,发生了什么?
                        1.React解析组件标签,找到了MyComponent组件。
                        2.发现组件是使用类定义的,随后new出来该类的实例,并通过该实例调用到原型上的render方法。
                        3.将render返回的虚拟DOM转为真实DOM,随后呈现在页面中。
            */

    一般来说,常规开发,应该会选用类式组件的形式去进行开发

    所以接下来的篇幅主要着重对于类式组件进行介绍

    1.组件的state的初始化与修改时,渲染视图

            //1.创建组件
            class Weather extends React.Component{
                //初始化状态
                state = {isHot:false,wind:'微风'}
    
                render(){
                    const {isHot,wind} = this.state
                    return <h1 onClick={this.changeWeather}>今天天气很{isHot ? '炎热' : '凉爽'},{wind}</h1>
                }
    
                //自定义方法————要用赋值语句的形式+箭头函数
                changeWeather = ()=>{
                    const isHot = this.state.isHot
                    this.setState({isHot:!isHot})
                }
            }
            //2.渲染组件到页面
            ReactDOM.render(<Weather/>,document.getElementById('test'))

    这里可以看出来,重新渲染视图的时候,很像之前接触的小程序写法this.setData(obj);

    2.组件接受数据(props)

            //创建组件
            class Person extends React.Component{
                constructor(props){
                    //构造器是否接收props,是否传递给super,取决于:是否希望在构造器中通过this访问props
                    super(props)
                    console.log('constructor',this.props);
                }
                //对标签属性进行类型、必要性的限制
                static propTypes = {
                    name:PropTypes.string.isRequired, //限制name必传,且为字符串
                    sex:PropTypes.string,//限制sex为字符串
                    age:PropTypes.number,//限制age为数值
                }
                //指定默认标签属性值
                static defaultProps = {
                    sex:'男',//sex默认值为男
                    age:18 //age默认值为18
                }
                render(){
                    // console.log(this);
                    const {name,age,sex} = this.props
                    //props是只读的
                    //this.props.name = 'jack' //此行代码会报错,因为props是只读的
                    return (
                        <ul>
                            <li>姓名:{name}</li>
                            <li>性别:{sex}</li>
                            <li>年龄:{age+1}</li>
                        </ul>
                    )
                }
            }
            //渲染组件到页面
            ReactDOM.render(<Person name="jerry"/>,document.getElementById('test1'))

    我们可以统一接收props,并且规定类型,是否必须,以及初始化

    值得注意的是,props是只读的

    3.组件的refs

    1.字符串形式

            //创建组件
            class Demo extends React.Component{
                //展示左侧输入框的数据
                showData = ()=>{
                    const {input1} = this.refs
                    alert(input1.value)
                }
                //展示右侧输入框的数据
                showData2 = ()=>{
                    const {input2} = this.refs
                    alert(input2.value)
                }
                render(){
                    return(
                        <div>
                            <input ref="input1" type="text" placeholder="点击按钮提示数据"/>&nbsp;
                            <button onClick={this.showData}>点我提示左侧的数据</button>&nbsp;
                            <input ref="input2" onBlur={this.showData2} type="text" placeholder="失去焦点提示数据"/>
                        </div>
                    )
                }
            }
            //渲染组件到页面
            ReactDOM.render(<Demo a="1" b="2"/>,document.getElementById('test'))

    2.回调函数形式

            //创建组件
            class Demo extends React.Component{
                //展示左侧输入框的数据
                showData = ()=>{
                    const {input1} = this
                    alert(input1.value)
                }
                //展示右侧输入框的数据
                showData2 = ()=>{
                    const {input2} = this
                    alert(input2.value)
                }
                render(){
                    return(
                        <div>
                            <input ref={c => this.input1 = c } type="text" placeholder="点击按钮提示数据"/>&nbsp;
                            <button onClick={this.showData}>点我提示左侧的数据</button>&nbsp;
                            <input onBlur={this.showData2} ref={c => this.input2 = c } type="text" placeholder="失去焦点提示数据"/>&nbsp;
                        </div>
                    )
                }
            }
            //渲染组件到页面
            ReactDOM.render(<Demo a="1" b="2"/>,document.getElementById('test'))

    3.createRef

            //创建组件
            class Demo extends React.Component{
                /* 
                    React.createRef调用后可以返回一个容器,该容器可以存储被ref所标识的节点,该容器是“专人专用”的
                 */
                myRef = React.createRef()
                myRef2 = React.createRef()
                //展示左侧输入框的数据
                showData = ()=>{
                    alert(this.myRef.current.value);
                }
                //展示右侧输入框的数据
                showData2 = ()=>{
                    alert(this.myRef2.current.value);
                }
                render(){
                    return(
                        <div>
                            <input ref={this.myRef} type="text" placeholder="点击按钮提示数据"/>&nbsp;
                            <button onClick={this.showData}>点我提示左侧的数据</button>&nbsp;
                            <input onBlur={this.showData2} ref={this.myRef2} type="text" placeholder="失去焦点提示数据"/>&nbsp;
                        </div>
                    )
                }
            }
            //渲染组件到页面
            ReactDOM.render(<Demo a="1" b="2"/>,document.getElementById('test'))
  • 相关阅读:
    struts2 s:if 的字符串比较问题
    struts2 标签
    servlet filter
    div滚动与控制
    页面定位
    linux下编译利用CMakeLists.txt 编译C++写的opencv程序
    yolo image.c
    强制杀进程
    PDB GDB 调试代码
    YOLOv3的Darknet在OpenCV3.4.1(bug)下编译出错填坑
  • 原文地址:https://www.cnblogs.com/ssszjh/p/14581014.html
Copyright © 2020-2023  润新知