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>
 

猜你喜欢

转载自www.cnblogs.com/CGWTQ/p/12358633.html