React基础

2020-04-10  本文已影响0人  橙赎
一、概念

官网:react中文文档

概念:用于构建用户界面的 JavaScript 库

二、JSX 简介

JSX是一种JavaScript的语法扩展,运用于React架构中,其格式比较像是模版语言,但事实上完全是在JavaScript内部实现的。元素是构成React应用的最小单位,JSX就是用来声明React当中的元素,React使用JSX来描述用户界面。

例如:

const element = <h1>Hello, world!</h1>;
const element = <div tabIndex="0"></div>;

也可以使用大括号,来在属性值中插入一个 JavaScript 表达式:

const element = <img src={user.avatarUrl}></img>;
三、元素渲染

元素是构成 React 应用的最小砖块。

<body>
    <div id="app"></div>
    <script type="text/babel">
        const user = {
            message: 'react',
            name: '小明',
            age: 23
        };
        const templete = (
            <div>
                <h2>这是{user.message}程序</h2>
                <p>他的名字叫{user.name},今年{user.age}岁</p>
            </div>
        );
        // 将元素渲染到DOM根节点
        ReactDOM.render(
            templete,
            document.getElementById('app')
        )
    </script>
</body>
四、组件和props
function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

ES6 的 class来定义组件

class Welcome extends React.Component {
  render() {
    return <h1>Hello, {this.props.name}</h1>;
  }
}
function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

const element = <Welcome name="World" />;
ReactDOM.render(
  element,
  document.getElementById('root')
);

注意:组件名称必须以大写字母开头。

五、state和生命周期
state

state顾名思义就是状态,它只是用来控制这个组件本身自己的状态,我们可以用state来完成对行为的控制、数据的更新、界面的渲染,由于组件不能修改传入的props,所以需要记录自身的数据变化。

setState
// Wrong
this.state.comment = 'Hello';

而是应该使用 setState():

// Correct
this.setState({comment: 'Hello'});

构造函数是唯一可以给this.state赋值的地方

六、事件处理
<body>
    <div id="app"></div>
    <script type="text/babel">
        class Click extends React.Component {
            constructor() {
                super();
                this.state = {
                    isopen: true
                }
            }
            render() {
                return (
                    <div>
                        <button onClick={this.handler.bind(this)}>{this.state.isopen ? '开' : '关'}</button>
                        <a href="http://www.baidu.com" onClick={this.handlerstop.bind(this)}>百度</a>
                    </div>
                )
            }
            handler() {
                // console.log(this)
                this.setState({
                    isopen: !this.state.isopen
                })

            }
            handlerstop(e) {
                e.preventDefault();
                alert('阻止a标签')
            }
        }
        ReactDOM.render(
            <Click />,
            document.getElementById('app')
        )
    </script>
</body>
七、条件渲染
<body>
    <div id="app"></div>
    <script type="text/babel">
        class Onlogin extends React.Component {
            render() {
                return (<div><p>欢迎使用</p><button onClick={this.props.onHandleClick}>登出</button></div>)
            }
        }
        class Onlogout extends React.Component {
            render() {
                return (<div><p>未登录,请登录</p><button onClick={this.props.onHandleClick}>登录</button></div>)
            }
        }
        class Login extends React.Component {
            constructor(props) {
                super(props);
                this.state = {
                    isLogin: this.props.isLogin
                }
            }
            render() {
                let button;
                if (this.state.isLogin) {
                    button = <Onlogin onHandleClick={this.clicklogin.bind(this)} />
                } else {
                    button = <Onlogout onHandleClick={this.clicklogin.bind(this)} />
                }
                return (
                    <div>{button}</div>
                )
            }
            clicklogin() {
                this.setState({
                    isLogin: !this.state.isLogin
                })
            }
        }
        ReactDOM.render(
            <Login isLogin={false} />,
            document.getElementById('app')
        )
    </script>
</body>
八、列表渲染
<body>
    <div id="app"></div>
    <script type="text/babel">
        class List extends React.Component {
            constructor() {
                super()
                this.state = {
                    numbers: [1, 2, 3, 4, 5]
                }
            }

            render() {
                return (
                    <ul>
                        {this.state.numbers.map(item => (
                            <li key={item.toString()}>{item * 2}</li>
                        ))}
                    </ul>

                )
            }
        }

        ReactDOM.render(
            <List />,
            document.getElementById('app')
        )
    </script>
</body>
上一篇 下一篇

猜你喜欢

热点阅读