react的学习日常整理

 

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>React练习</title>

    <script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
    <script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
    <!-- 生产环境中不建议使用 -->
    <script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
    <script src="https://cdn.staticfile.org/jquery/2.1.4/jquery.min.js"></script>
    <!--    官方CDN-->
    <!--    <script src="https://unpkg.com/react@16/umd/react.development.js"></script>-->
    <!--    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>-->
    <!--    <!– 生产环境中不建议使用 –>-->
    <!--    <script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>-->

</head>
<body>
<div id="example"></div>
<div id="helloworld"></div>
<div id="app"></div>
<div id="state"></div>
<div id="clickButton"></div>
<div id="toggle"></div>
<div id="condition"></div>
<div id="confirm_login"></div>
<div id="expression"></div>
<div id="list"></div>
<div id="ajax"></div>
<div id="input"></div>
<div id="select"></div>
</body>
<script type="text/babel">
    //封装函数
    function tick() {
        const element = (<div>
                <h2>你好啊</h2>
                <h2>现在是{new Date().toLocaleTimeString()}.</h2>
        </div>
        );
        ReactDOM.render(
            element,
            document.getElementById('example')
        );

    }
    setInterval(tick,1000);
</script>
<script type="text/babel">
    //自定义组件
    function HelloMessage(props) {
        return <h1>Hello {props.name}!</h1>;
    }
    const helloworld = <HelloMessage name="World" />
    ReactDOM.render(
        helloworld,
        document.getElementById("helloworld")
    );
</script>
<script type="text/babel">
    //组合组件方式
    function Name(props) {
        return <h1>网站名称:{props.name}</h1>;
    }
    function Url(props) {
        return <h1>网站地址:{props.url}</h1>;
    }
    function Nickname(props) {
        return <h1>网站小名:{props.nickname}</h1>;
    }
    function App() {
        return (
            <div>
                <Name name="百度" />
                <Url url="www.baidu.com" />
                <Nickname nickname="小度" />
            </div>
        );
    }
    ReactDOM.render(
        <App/>,
        document.getElementById("app")
    );
</script>
<script type="text/babel">
    //react state(状态)  这是用来减少DOM操作
    class Clock extends React.Component{
        //构造函数
        constructor(props) {
            super(props);
            this.state = {date:new Date()};
        }
        //生命周期钩子--渲染完界面后调用
        componentDidMount(){
            this.jsq = setInterval(
                () => this.tick(),
            );
        }
        //卸载组件后调用
        componentWillUnmount(){
            clearInterval(this.jsq);
        }
        //主动调用方法 setState代表状态改变调用
        tick(){
            this.setState({
                date:new Date(),
            });
        }
        render(){
            return(
                <div>
                    <h3>时间计时器</h3>
                    <h3>现在是{this.state.date.toLocaleTimeString()}.</h3>
                </div>
            );
        }
    }
    ReactDOM.render(
        <Clock />,
        document.getElementById("state")
    );
</script>
<script type="text/babel">
    //事件
    //不能用return false来终止默认行为,要使用preventDefault
    function ActionLink() {
        function handleClick(e){
            e.preventDefault();
            console.log('链接被点击');
        }

        return (
            <a href="#" onClick={handleClick}>点我</a>
        );
    }
    ReactDOM.render(
        <ActionLink />,
        document.getElementById("clickButton")
    );
</script>
<script type="text/babel">
    //定义一个组件--切换开关的按钮
    class Toggle extends React.Component{
        constructor(props) {
            super(props);
            this.state = {isOpen:true};
            //(绑定之后才能在回调函数中调用,我第一次写就漏掉了,会报错)
            this.handleClick = this.handleClick.bind(this);
        }
        handleClick(){
            this.setState(prevState => ({
                    isOpen: !prevState.isOpen
            }));
        }
        //还有一种写法确保this绑定
        // handleClick = () => {
        //     console.log('this is:',this);
        // }
        render(){
            return (
                <div>
                    <button onClick={this.handleClick}>
                        {this.state.isOpen?'ON':'OFF'}
                    </button>
                </div>
            );
        }
    }
    ReactDOM.render(
        <Toggle />,
        document.getElementById("toggle")
    );
</script>
<script type="text/babel">
    //条件渲染
    function Register(props) {
        return <h3>请先注册!</h3>
    }
    function Greet(props) {
        return <h3>欢迎回来!</h3>
    }
    function Condition(props) {
        const isLoginIn = props.isLoginIn;
        if(isLoginIn){
            return <Greet />;
        }else{
            return <Register />;
        }
    }
    ReactDOM.render(
        <Condition isLoginIn={false} />,
        document.getElementById("condition")
    );
</script>
<script type="text/babel">
    //元素
    class LoginConfirm extends React.Component{
        constructor(props) {
            super(props);
            this.state = {isLoginedIn: false};
        }
        handleLogin = () => {
            this.setState({isLoginedIn: true});
        }
        handleLoginOut = () => {
            this.setState({isLoginedIn: false});
        }
        render(){
            const isLoginedIn = this.state.isLoginedIn;
            let button =null;
            if(isLoginedIn){
                //这里使用了this.handleLoginOut是因为方法中绑定了this,注意方法的写法
                button = <LogoutButton onClick={this.handleLoginOut} />;
            }else{
                button = <LoginButton  onClick={this.handleLogin} />;
            }
            return (
                <div>
                    <Greeting isLoginedIn={isLoginedIn} />
                    {button}
                </div>
            );
        }

    }
    function UserGreet(props) {
        return <h3>欢迎回来!</h3>;
    }
    function UserRegister(props) {
        return <h3>请先注册!</h3>;
    }
    function Greeting(props) {
        const isLoginedIn = props.isLoginedIn;
        if(isLoginedIn){
            return <UserGreet />;
        }else{
            return <UserRegister />;
        }
    }
    function LogoutButton(props){
        return(
            <div>
                <button onClick={props.onClick}>退出</button>
            </div>
        );
    }
    function LoginButton(props){
        return(
            <div>
                <button onClick={props.onClick}>登陆</button>
            </div>
        );
    }
    ReactDOM.render(
        <LoginConfirm />,
        document.getElementById("confirm_login")
    );
</script>
<script type="text/babel">
    //运算符
    function Email(props) {
        const unreadMessage = props.unreadMessage;
        return(
            <div>
                <h3>测试加入运算符计算</h3>
                <p>true&&表达式 为真输出后面表达式 为假不会输出</p>
                {
                    unreadMessage.length > 0 &&
                    <h3>您有{unreadMessage.length}条未读消息</h3>
                }
            </div>
        );
    }
    const message = ['1','2','3','4'];
    ReactDOM.render(
        <Email unreadMessage = {message} />,
        document.getElementById("expression")
    );
</script>
<script type="text/babel">
    //列表
    function NumberList(props) {
        const number = props.number;
        const listItem = number.map((v)=>
            <li key={v.toString()}>
                {v}
            </li>
        );
        return (
            <ul>{listItem}</ul>
        );
    }
    const number = [1,2,3,4,5];
    ReactDOM.render(
        <NumberList number={number} />,
        document.getElementById("list")
    );
</script>
<script type="text/babel">
    //react ajax
    class HttpAjax extends React.Component{
        constructor(props) {
            super(props);
            this.state = {username:'',lastUrl:''};
        }
        componentDidMount(){
            this.request = $.get(this.props.source,function (res) {
                var result = res[0];
                this.setState({
                    username:result.owner.login,
                    lastUrl: result.html_url
                });
            }.bind(this));
        }
        componentWillUnmount(){
            this.request.abort();
        }
        render(){
            return (
                <div>
                    {this.state.username}用户最新的gist共享地址:
                    <a href={this.state.lastUrl}>{this.state.lastUrl}</a>
                </div>
            );
        }
    }
    ReactDOM.render(
        <HttpAjax source="https://api.github.com/users/octocat/gists" />,
        document.getElementById("ajax")
    );
</script>
<script type="text/babel">
    //表单元素
    class InputChange extends React.Component{
        constructor(props) {
            super(props);
            this.state = {value:'Hello Tom!'};
            this.handleChage = this.handleChage.bind(this);
        }
        handleChage(event){
            this.setState({value:event.target.value});
        }
        render(){
            var value = this.state.value;
            return (
                <Content myData = {value} upData = {this.handleChage} />
            );
        }
    }
    function Content(props){
        return (
            <div>
                <input type="text" value={props.myData} onChange={props.upData} />
                <h3>{props.myData}</h3>
            </div>
        );
    }
    ReactDOM.render(
        <InputChange />,
        document.getElementById("input")
    );
</script>
<script type="text/babel">
    //下拉框
    class Forms extends React.Component{
        constructor(props) {
            super(props);
            this.state = {value:'0'};
            this.changeSelect = this.changeSelect.bind(this);
            this.formSubmit = this.formSubmit.bind(this);
        }
        changeSelect(event){
            this.setState({value:event.target.value});
        }
        formSubmit(event){
            alert('您的选择是:'+ this.state.value);
            event.preventDefault();
        }
        render(){
            return(
                <form onSubmit={this.formSubmit}>
                    <lable>选择您最喜欢的网站</lable>
                    <select value={this.state.value} onChange={this.changeSelect} >
                        <option value="0">--请选择--</option>
                        <option value="gg">谷歌</option>
                        <option value="jd">京东</option>
                        <option value="tb">淘宝</option>
                        <option value="dw">得物</option>
                    </select>
                    <input type="submit" value="提交" />
                </form>
            );
        }
    }
    ReactDOM.render(
        <Forms />,
        document.getElementById("select")
    );
</script>
</html>

  

 
 
 
 
 
 
 
 
 
 
 
posted @ 2020-12-30 17:36  thomas张  阅读(60)  评论(0编辑  收藏  举报