zoukankan      html  css  js  c++  java
  • 02-React基础语法(2)

     

    一、条件渲染
    语法:使用原生 js 的 if 或者 三元表达式 判断
     
    例子:判断用户是否登录,提示:已登录、未登录 (User组件)
     
    <script type="text/babel">
                // 判断用户是否登录,提示:已登录、未登录 (User组件)
                class Login extends React.Component{
                    constructor(props) {
                        super(props)
                        this.state = {
                            token : "adasd"
                        }
                    }
                    render(){
                        let { 
                            token
                         } = this.state
                        // if(token){
                        //     return <div><p>已登录</p></div>
                        // }else{
                        //     return <div><p>未登录</p></div>
                        // }
                        return <div><p>{ token ? '已登录' : '未登录' }</p></div>
                    }
                }
     
                ReactDOM.render(<Login />,document.querySelector('#app'))
    </script>
     
    二、列表 & key
    语法:
    forEach 	遍历数组
    map		修改数组的数据,返回一个【修改过】的数组
    filter  	过滤数组的数据,返回一个【新】的数组
    find    	找值
    findIndex   找下标
    let newArr = arr.map((item,index)=> {// 遍历arr数组,将里面的值挨个赋值给item
        return 数据  // return的数据会push到newArr中
    })
    例子:
            <script type="text/babel">
                class List extends React.Component{
                    constructor(props){
                        super(props)
                        this.state = {
                            list : ['周瑜','小乔','诸葛'],
                            listObj : [
                                {id:1,content:'xxxxx1'},
                                {id:2,content:'xxxxx2'},
                                {id:3,content:'xxxxx3'},
                                {id:4,content:'xxxxx4'}
                            ]
                        }
                    }
     
                    render() {
                        let {
                            list,
                            listObj
                        } = this.state
     
                        let listNew = list.map((item,index) => {
                            return <li key={index}>{ item }</li>
                        })
                        let newListObj = listObj.map((item,index) => {
                            return <li key={index}>id:{ item.id },content:{ item.content }</li>
                        })
     
                        return <div>
                                <p>数组</p>
                                <ul>{listNew}</ul>
                                <p>对象</p>
                                <ul>{newListObj}</ul>
                            </div>
                    }
                }
     
                ReactDOM.render(<List />,document.querySelector('#app'))
            </script>
    三、表单
    ① 受控组件
    渲染表单的React组件还控制着用户输入过程中表单发生的操作
    ② 非受控组件
    value值为只读的0
    如:input type='file'
     
    ③ 数据双向绑定
    1. 绑定 value 值
    2. change 事件触发
    3. 跟新模型数据
     
    例子:
    <script type="text/babel">
            class Test extends React.Component{
                constructor(props){
                    super(props)
                    
     
                    // 模型数据
                    this.state = {
                        value1 : 'value1',
                        value2 : 2,
                        value3 : 'value3'
                    }
                }
     
                render() {
                    let {
                        value1,
                        value2,
                        value3
                    } = this.state
                    return (
                        <div>
                            <p>input</p>
                            <input type="text" name="value1" value = {value1} onChange = { this.onChangeFn.bind(this) }/>
                            <p>select</p>
                            <select name="value2" value = {value2} onChange = { this.onChangeFn.bind(this) }>
                                <option value="1">1</option>    
                                <option value="2">2</option>    
                                <option value="3">3</option>    
                            </select>
                            <p>textarea</p>
                            <textarea name="value3" value = {value3} onChange = { this.onChangeFn.bind(this) }></textarea>
                        </div>
                    )
                }
     
                // 方法
                onChangeFn(e){
                    // 获取数据
                    let value = e.target.value
                    let name = e.target.name
                    
                    // 更新数据
                    this.setState({
                        [name]:value
                    })
                }
            }
     
            ReactDOM.render(<Test />,document.querySelector('#app'))
    </script>
    四、组件样式
    语法:
    ① 外部引入
    <link rel="stylesheet" href="路径及文件名.css">
    ② 行内样式
    <标签名 style={ {css属性名:属性值,....,css属性名n:属性值n} }></标签名>
     
     
    注:React 中添加 class 通过 className
    <p className = {'aa'}>22</p>
     
    五、ref标记
    语法;
    <标签 ref="标识"></标签名>
    this.refs.标识   使用该语法获取DOM元素
     
    六、组件通信
    ① 父传子
    语法
    父在调用子组件上传递数据
    子通过this.props.键获取数据
     
    例子
     
    ② 子传父
    语法
    父定义普通方法接受数据
    子调用普通方法传递数据
     
    例子
    <script type="text/babel">
                class Test1 extends React.Component{
                    constructor(props){
                        super(props)
     
                        // 更改 this 指向
                        this.sendData = this.sendData.bind(this)
     
                        this.state = {
                            msg :''
                        }
                    }
     
                    render(){
                        return (
                            <div>
                                <p ref={'test'}>Test1</p>
                                {/* 传递方法 */}
                                <Test2 sendData = {this.sendData}/>
                            </div>
                        )
                    }
                    // 方法
                    // 接收数据
                    sendData(data){
                        console.log('子数据',data);
     
                        // 更改数据
                        this.setState({
                            msg : data
                        })
                    }
                }
     
                class Test2 extends React.Component{
                    constructor(props){
                        super(props)
                        this.state = {
                            msg:'5566'
                        }
                    }
                    componentDidMount(){
                        // 传递数据
                        this.props.sendData(this.state.msg)
                    }
                    render(){
                        return (
                            <div>
                                <p ref={'test'}>Test2</p>
                            </div>
                        )
                    }
                }
     
                // 页面加载
                ReactDOM.render(<Test1 />,document.querySelector('#app'))
    </script>
    ③ 非父子
    语法
    父在调用n个子组件上传递数据(公共父)
    子通过this.props.键获取数据
     
    例子
    <script type="text/babel">
            //定义公共父类
            class Test extends React.Component {
                constructor(props) {
                    super(props)
     
                    this.state = {
                        age:15
                    }
                }
     
                render() {
                    return (
                        <div>
                            <p ref={'test'}>Test0</p>
                            {/* 传递数据 */}
                            <Test1 sendAge = {this.state.age}/>
                            <Test2 sendAge = {this.state.age}/>
                        </div>
                    )
                }
                
            }
     
            class Test1 extends React.Component {
                constructor(props) {
                    super(props)
     
                    this.state = {
                        msg: ''
                    }
                }
     
                render() {
                    return (
                        <div>
                            <p ref={'test1'}>Test1</p>
                            {/* 接受使用数据 */}
                            <p>{this.props.sendAge}</p>
                        </div>
                    )
                }
            }
     
            class Test2 extends React.Component {
                constructor(props) {
                    super(props)
                    this.state = {
                        msg: '5566'
                    }
                }
                render() {
                    return (
                        <div>
                            <p ref={'test2'}>Test2</p>
                            {/* 接受使用数据 */}
                            <p>{this.props.sendAge}</p>
                        </div>
                    )
                }
            }
     
            // 页面加载
            ReactDOM.render(<Test />, document.querySelector('#app'))
    </script>
     
  • 相关阅读:
    mybatis入门-1
    try-with-resources 在捕获异常之后自动释放资源 try(){}
    mybatis配置logback
    使用原生的jdbc连接数据库进行查询
    java中的反射
    ajax实现搜索自动补全
    java IO-1 File 2019-07-24
    VMware历史版本
    Centos8.3-NIS
    用户管理
  • 原文地址:https://www.cnblogs.com/CGWTQ/p/12358633.html
Copyright © 2011-2022 走看看