React中props

简介: React中props

React中props的使用场景挺多的,这里总结下


1. 组件的props


// 使用组件
<Hello name="Aaron" age={18}>


// 函数组件 使用props
function Hello(props) {
  return (
    <div>接收到数据: {props.name}</div>
  )
}


// 类组件 使用this.props
class Hello extends React.Component {
  render() {
    return (
      <div>几首到的数据{this.props.age}</div> 
    )
  }
}


2. 组件通讯


  • 父 => 子


// 父组件
class Parent extends React.Component {
  state = { lastName: '陈' }
    render() {
    return (
      <div>
        传递数据给子组件: <Child name={this.state.lastName} />
      </div>
    )
   }
}


// 子组件
class Child extends React.Component {
   render() {
    return (
      <div>
        父传给子的数据: {this.props.name}
      </div>
    )
   }
}


  • 子 => 父


// 父组件
class Parent extends React.Component {
  state = {
    parentMsg: ''
   }
  getChildMsg = data => {
    this.setState({
      parentMsg: data
    })
   }
   render() {
    return(
      <div>
        父组件: {this.state.parentMsg}
        <Child getMsg={this.getChildMsg} />
      </div>  
    )
   }
}


  // 子组件
  class Child extends React.Component {
    state = {
      msg: '学前端'
    }
    handleClick = () => {
      this.props.getMsg(this.state.msg)
    }
    render() {
      return (
        <div>
            子组件: <button onClick={this.handleClick} />
          </div>
      )
    }
   }


  • 兄弟组件通讯(借助父组件)


class Counter extends React.Component {
   state = {
    count: 0
   }
   onIncrement = () => {
    this.setState({
        count: this.state.count + 1
       })
  }
  render() {
    return (
      <div>
        <Child1 count={this.state.count} />
        <Child2 onIncrement={this.onIncrement} />
      </div>
    )
   }
}


// Child1
const Child1 = (props) => {
  return <h1>计数器: {props.count}</h1>
}


const Child2 = (props) => {
  return <button onClick={() => props.onIncrement()}>+1</button>
}


  • 对于通讯来说还可以使用Context解决祖孙组件的通讯


const { Provider, Consumer } = React.createContext()
class App extends React.Component {
 render() {
   return (
   // value表示要传递的数据
     <Provider value='pink'>
       <div className='app'>
         <Node />
       </div>
     </Provider>
   )
 }
}
const Node = props => {
 return (
   <div className="node">
     <SubNode />
   </div>
 )
}
const SubNode = props => {
 return (
   <div className='subnode'>
     <Child />
   </div>
 )
}
const Child = props => {
 return <div className='child'>
   <Consumer>
     {
       data => <span>我是子节点 -- {data}</span>
     }
   </Consumer>
 </div>
}


3.props校验


  • children属性


// 当组件中有子节点时, props.children就代表该子节点的内容
function Hello(props) {
  return (
    <div>
      组件的子节点: {props.children}
    </div>
  )
}
<Hello>我是子节点</hello>


  • props校验(由于使用组件的时候传递的数据格式可能不符合组件自身设定的格式,可以使用props校验)


npm i props-types|yarn add prop-types


import PropTypes from 'prop-types'
function App(props) {
  return (
    <h1>Hi,{props.colors}</h1>
  )
}
// 添加props校验
App.propTypes = {
    colors: PropTypes.array
}


  • 其他约束


App.propTypes = {
  a: PropTypes.number,
  fn: PropTypes.func.isRequired,
  tag: PropTypes.element,
  // shape方法指定特定结构
  filter: PropTypes.shape({
    area: PropTypes.string,
    price: PropTypes.number
  })
}


  • props默认值


const App = props => {
  console.log(props)
  return (
    <div>
      <h1>此处展示props的默认值: {props.pageSize}</h1>
    </div>
  )
}
// 添加props默认值
App.defaultProps = {
  pageSize: 10
}
const container = document.getElementById('root');
const root = createRoot(container);
root.render(<App pageSize={20} />);


相关文章
|
3月前
|
前端开发 JavaScript
react学习(13)props
react学习(13)props
|
4月前
|
前端开发
React函数式组件props的使用(六)
【8月更文挑战第14天】React函数式组件props的使用(六)
75 1
React函数式组件props的使用(六)
|
3月前
|
前端开发
学习react基础(2)_props、state和style的使用
本文介绍了React中组件间数据传递的方式,包括props和state的使用,以及如何在React组件中使用style样式。
42 0
|
3月前
|
前端开发
React添加路径别名alias、接受props默认值、并二次封装antd中Modal组件与使用
本文介绍了在React项目中如何添加路径别名alias以简化模块引入路径,设置组件props的默认值,以及如何二次封装Ant Design的Modal组件。文章还提供了具体的代码示例,包括配置Webpack的alias、设置defaultProps以及封装Modal组件的步骤和方法。
95 1
React添加路径别名alias、接受props默认值、并二次封装antd中Modal组件与使用
|
2月前
|
前端开发 JavaScript CDN
React Props
10月更文挑战第8天
22 0
|
3月前
|
前端开发
react学习(15)函数式组件中使用props
react学习(15)函数式组件中使用props
|
3月前
|
前端开发
react学习(14)类式组件的构造器与props
react学习(14)类式组件的构造器与props
|
3月前
|
前端开发 JavaScript
React 中的 props 属性传递技巧
【9月更文挑战第6天】本文详细介绍了React中`props`的基本用法,包括传递基本数据类型、对象和数组。文章通过多个代码示例展示了如何正确使用`props`,并探讨了常见的问题及解决方法,如`props`不可变性、默认值设置及类型检查等。正确掌握这些技巧有助于提升编程效率,编写出更健壮的代码。
98 13
|
4月前
|
前端开发 JavaScript
React类组件props的使用(五)
【8月更文挑战第14天】React类组件props的使用(五)
54 1
React类组件props的使用(五)
|
4月前
|
开发者
告别繁琐代码,JSF标签库带你走进高效开发的新时代!
【8月更文挑战第31天】JSF(JavaServer Faces)标准标签库为页面开发提供了大量组件标签,如`&lt;h:inputText&gt;`、`&lt;h:dataTable&gt;`等,简化代码、提升效率并确保稳定性。本文通过示例展示如何使用这些标签实现常见功能,如创建登录表单和展示数据列表,帮助开发者更高效地进行Web应用开发。
51 0