• react学习笔记3--数据双向绑定,组件通信


    一、表单处理

     

    1、受控组件-input元素

    通过设置input元素的value值(或复选框的checked值)实现Getter,通过监听onChange事件实现Setter,从而实现数据双向绑定。

    1. class element extends React.Component {
    2. state = {
    3. txt:"",
    4. checked:false
    5. }
    6. handleTxt = (e) => {
    7. this.setState({txt : e.target.value})
    8. }
    9. handleChecked = e => {
    10. this.setState({checked : e.target.checked})
    11. }
    12. render(){
    13. return (
    14. )
    15. }
    16. }

    多表单的优化操作:

    1)给input元素加name,name=state中对应的数据名、2)统一用一个处理函数处理数据变化,函数内用e.target.name获取应该修改的状态名

    1. class element extends React.Component {
    2. state = {
    3. txt:"",
    4. checked:false
    5. }
    6. handleForm = (e) => {
    7. let name = e.target.name
    8. let value = e.target.value||e.target.checked
    9. this.setState({[name] : value}) //!!这里要用[],否则会当作"name"字符串处理
    10. }
    11. render(){
    12. return (
    13. )
    14. }
    15. }

    2、非受控组件

    二、组件通信

    1、props:一个对象

    1. import React from 'react'
    2. import ReactDom from 'react-dom'
    3. //函数式:porps形参
    4. function Element1 (props){
    5. return (
    6. <p>{props.name}+{props.age}p>
    7. )
    8. }
    9. //类式:this.props
    10. class Element2 extends React.Component{
    11. render(){
    12. return (
    13. <p>{this.props.name}+{this.props.age}p>
    14. )
    15. }
    16. }
    17. ReactDom.render(<Element1 name='bob' age={18}/>)
    18. ReactDom.render(<Element2 name='bob' age={18}/>)

    注:1)props可以传递任意数据类型,包括数组、对象、函数、dom结构等。2)props只读。3)在类中如果定义了constructor(props)则必须将props传入做形参,且需要在super(props)函数也传入props形参

    组件间通信方式:

    1)父传子:props传数据,如上

    2)子传父:props传函数,通过回调函数传参方式

    3)兄弟组件通信:状态提升,将共享状态的定义提升到公共父组件

    2、context 跨级组件通信,祖先元素将数据传递给后代元素时使用

    假设 祖先 > subComponent > 后代

    1)创建两个内置组件Provider、Comsumer

    const {Provider,Consumer} = React.createContext()

    2)祖先元素中用Provider包裹返回值

    1. //祖先
    2. render(){
    3. return (
    4. )
    5. }

    3)后代元素用Consumer {}包裹

    1. render(){
    2. return(
    3. { data =>

      名字是:{data}

      }

  • )
  • }
  • 三、props深入

    1、props的children属性

    当渲染组件时,组件中嵌套的内容视为children属性,可以通过props.children访问到。

    嵌套的内容可以是文本、标签、组件、jsx语句、函数等

    1. const App = (props)=>{
    2. props.children() //函数执行
    3. return (
    4. <div>{props.children}div>
    5. )
    6. }
    7. // ReactDom.render(这是一段文本)
    8. // ReactDom.render(

      这是一个p标签

      )
    9. // ReactDom.render(这是一个子组件)
    10. // ReactDom.render({()=>console.log("这是一个函数")})

    2、props校验,需要安装 prop-types包

    常用的校验规则:

     3、props默认值

     

     

  • 相关阅读:
    day30-JQuery03
    Spring Authorization Server 实现授权中心
    如何用Python获取网页指定内容
    数据结构与算法-选择&冒泡&快排&计数
    十二、流程控制-循环
    python让女友照片飞来飞去
    不用定时器,实现鼠标长悬浮和鼠标长按监听
    Day17_10 JavaWeb基础之IDEA、JavaWeb项目部署
    基于自适应扰动的疯狂蝴蝶算法-附代码
    自动化横行的今天,手工测试如何杀出一条血路?
  • 原文地址:https://blog.csdn.net/qq_36582776/article/details/127866755