React

介绍 #

facebook推出的用于build user interfaces 的类库

使用 #

o-> webpack
# webpack.config.js
var webpack = require('webpack')
module.exports = {
        devtool: 'inline-source-map',
        entry: ['webpack/hot/dev-server', __dirname + '/app/main.js'],
        output: {
                path: __dirname + '/build',
                filename: 'bundle.js'
        },
        module: {
                loaders: [
                        {
                                test: /\.(js|jsx)$/,
                                exclude: /node_modules/,
                                loader: 'babel-loader',
                        }
                ]
        },
        plugins: [
                new webpack.HotModuleReplacementPlugin(),
                new webpack.DefinePlugin({
                        'process.env': {
                                NODE_ENV: JSON.stringify('production')
                        }
                })
        ],
        devServer: {
                contentBase: __dirname + '/build',
                historyApiFallback: true,
                inline: true,
                port: 3031,
        }
}

# index.html
<div id="content"></div>
<script src="bundle.js"></script>


o-> browser
# index.html
<script src="build/react.js"></script>
<script src="build/react-dom.js"></script>
<script src="browser.min.js"></script>
<body>
        <div id="example"></div>
        <script type="text/babel">
                ReactDOM.render(
                        <h1>Hello</h1>
                        document.getElementById('example')
                )
        </script>
</body>

api #

ReactDOM
        render
                render(
                        <h1>Hello</h1>
                        document.getElementById('example')
                )
React
        # createClass
        createClass({
                getInitialState () {return {liked: false}},
                handleClick(event) {
                        this.setState({liked: !this.state.liked})
                },
                getDefaultProps () {
                        # 设定属性默认值
                        return {title: 'Hello'}
                },
                propTypes: {
                        # 限定属性的类型
                        title: React.PropTypes.string,isRequired
                },
                render () {return <h1></h1>}
        })
        # createElement
        createElement('h1', {title: 'a'}, 'b')
        # Component
        class List extends React.Component{
                constructor() {super()}
                render() {return ()}
        }
        
this
        # 代表当前标签
        props
                # 属性
                children
                        # 代表所有子节点的text
                        # 没有子节点, 是undefined, 有一个子节点, 是Object, 多个子节点是array
                        # React.Children来处理children
        refs
                # 获取dom
        state
jsx
    介绍
            < 开头解析为html, { 开头解析为js
    例子
    # Profile.jsx
    import React from 'react';
    export default Class Profile extends React.Component {
            constructor (props) {
                    super(props)
                    this.state = {
                            list: [1,2,3],
                            activeIndex: -1
                    }
            },
            activate (index) {
                    this.setState({activeIndex: index})
            },
            render () {
                    const {list, activeIndex} = this.state
                    const lis = list.map((item, index) => {
                            const cls = index === activeIndex ? 'active' : ''
                            return (
                                    <li key={index} className={cls} onClick={() => this.activate(index)}></li>
                            )
                    })
                    return (<ul>{lis}</ul>)
            }
    }


    o->
    <div>
    {/*注释*/}
    {
            names.map((name) => {return <div>{name}</div>})
    }
    </div>

    o-> ref
    <input ref="domNam">

    o-> 事件
    <p onClick={this.handleClick}>

    o-> 属性
    <Profile {...props} name='a'>
            # 后面的覆盖前面的

插件 #

react-big-calendar
    日历

工具 #

JSXTransformer
        # 浏览器中引入,编译jsx
https://babeljs.io/repl/
        # 在线编译jsx