react--组件

组件间传值:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>
<body>
<div id="app">

</div>
<script src="../js/react.production.min.js"></script><!--react核心库-->
<script src="../js/react-dom.production.min.js"></script><!--操作DOM的react扩展库-->
<script src="../js/babel.min.js"></script><!--解析JSX语法-->
<script type="text/babel">
    class Com extends React.Component {
        click = ()=>{
            // console.log(this.input);
            // console.log(this.p.innerText);
            console.log(this.refs.my.value);//父组件访问子组件用refs
        };

        render() {
            return (
                <div>
                    <input type="text" ref={(input)=>{this.input=input}}/>
                    <p ref={(p)=>{this.p=p}}>我是段落</p>
                    <input type="text" ref="my"/>
                    <button onClick={this.click}>点击</button>
                </div>
            );
        }
    }

    ReactDOM.render(<Com/>,document.getElementById('app'));
</script>
</body>
</html>

列表:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>
<body>
<div id="app"></div>
<script src="../js/react.production.min.js"></script><!--react核心库-->
<script src="../js/react-dom.production.min.js"></script><!--操作DOM的react扩展库-->
<script src="../js/babel.min.js"></script><!--解析JSX语法-->
<script type="text/babel">
    class Add extends React.Component {
        click = ()=>{
            this.props.allAdd(this.input.value);
        };
        render() {
            const {length} = this.props;
            return (
                <div>
                    <input type="text" ref={(input)=>{this.input=input}}/>
                    <button onClick={this.click}>add{length}</button>
                </div>
            )
        }
    }

    class List extends React.Component {
        render() {
            const {list} = this.props;
            return (
                <div>
                    <ul>
                        {
                            list.map((v,i)=>{
                                return <li key={i}>{v}</li>
                            })
                        }
                    </ul>
                </div>
            )
        }
    }

    class App extends React.Component {
        state = {
            list:['吃饭','睡觉','打游戏','游泳']
        };
        add = (value)=>{
            const {list} = this.state;//获取原先的list
            list.unshift(value);//将添加的值传入list
            this.setState(list);//重新设置list
        };
        render() {
            const {list} = this.state;//获取list
            return (
                <div>
                    <Add allAdd={this.add} length={list.length}/>
                    <List list={list} />
                </div>
            )
        }
    }

    ReactDOM.render(<App />,document.getElementById('app'));
</script>
</body>
</html>

受控组件和非受控组件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>test</title>
</head>
<body>
<div id="app"></div>
<script src="../js/react.production.min.js"></script><!--react核心库-->
<script src="../js/react-dom.production.min.js"></script><!--操作DOM的react扩展库-->
<script src="../js/babel.min.js"></script><!--解析JSX语法-->
<script type="text/babel">
    class Com extends React.Component {
        state = {
            age:''
        };
        //非受控组件 不受state控制
        click = () => {
            console.log(this.input.value);
        };
        change = (event)=>{
            console.log(event.target.value);
            this.setState({
                age: event.target.value
            })
        };
        render() {
            const {age} = this.props;
            return (
                <div>
                    姓名:<input type="text" ref={(input)=>{this.input=input}}/>
                    <button onClick={this.click}>获取姓名</button>
                    年龄:<input type="text" value={age} onChange={this.change}/>
                </div>
            );
        };
    }
    ReactDOM.render(<Com />,document.getElementById('app'));
</script>
</body>
</html>

组件生命周期:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Test</title>
</head>
<body>
<div id="app"></div>
<script src="../js/react.production.min.js"></script><!--react核心库-->
<script src="../js/react-dom.production.min.js"></script><!--操作DOM的react扩展库-->
<script src="../js/babel.min.js"></script><!--解析JSX语法-->
<script type="text/babel">
    class Com extends React.Component {
        state = {
            msg:123
        };

        sing() {
            return new Promise((resolve,reject)=>{
                setTimeout(()=>{
                    resolve('唱一首歌');
                },1000);
            })
        };

        async get() {
            await this.sing().then((res)=>{
                console.log(res);
            });
        };



        componentWillMount() {
            //will会先执行,但不一定先执行完毕
            console.log('之前');
            // this.get();
        }

        componentDidMount() {
            //进行ajax操作,获取后台数据
            console.log('之后');
        }

        shouldComponentUpdate(nextProps, nextState) {
            const {msg} = this.state;

            //如果没有
            if ({msg} !== nextState) {
                return true;
            }
            console.log('更新');
            return false;
        }

        componentWillUpdate() {
            console.log('更新之前');
        }

        componentDidUpdate() {
            console.log('更新之后');
            //再次获取数据
        }

        click = ()=>{
            this.setState({
                msg: 234
            })
        };

        render() {
            console.log('render');
            const {msg} = this.state;
            return(
                <div>
                    <h1>{msg}</h1>
                    <button onClick={this.click}>更新</button>
                </div>
            )
        }
    }

    ReactDOM.render(<Com />,document.getElementById('app'));
</script>
</body>
</html>

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值