当前位置:   article > 正文

reac学习之路(一) 组件之间的传值_reac详细博客

reac详细博客

近期对于react比较感兴趣 因为最近想要换工作 投递简历的时候发现一些高薪的或者大点的公司 对于react的应用更多点 所以往后就抽点时间把react在看看 之前也有学过 但是好多年没有用了 都忘记差不多了 好了 话不多说 开始我们的探索之路吧

学习react除了基本的语法 首先可能要明确的就是组件了 凡是涉及到组件的 立马想到的就是组件之间的通讯 react的通讯 和vue差不多 接下来就一起来看下吧

1. 父子组件之间的通讯

  1. import React,{createContext} from "react";
  2. class App extends React.Component{
  3. state={
  4. message:'我是父组件的数据'
  5. }
  6. render(){
  7. return(
  8. <div>
  9. <div>我是父组件</div>
  10. <Child msg={this.state.message}></Child>
  11. </div>
  12. )
  13. }
  14. }
  15. class Child extends React.Component{
  16. state={
  17. message:'我是子组件的数据'
  18. }
  19. render(){
  20. let {msg} = this.props
  21. return(
  22. <div>
  23. <div>我是子组件</div>
  24. <div>接收到父组件的数据:{msg}</div>
  25. </div>
  26. )
  27. }
  28. }
  29. export default App;

总结:在子组件标签上面自定义属性 属性值为父组件要传递的数据 在子组件内部通过props接收(函数组件通过props 类组件通过this.props) 使用props.属性名 或this.props.属性名 

2. 子父组件之间的通讯

  1. import React,{createContext} from "react";
  2. class App extends React.Component{
  3. state={
  4. message:'我是父组件的数据'
  5. }
  6. sendMsg = (e)=>{
  7. console.log(e)
  8. }
  9. render(){
  10. return(
  11. <div>
  12. <div>我是父组件</div>
  13. <Child msg={this.state.message} sendMsg = {this.sendMsg}></Child>
  14. </div>
  15. )
  16. }
  17. }
  18. class Child extends React.Component{
  19. state={
  20. message:'我是子组件的数据'
  21. }
  22. sendMsg = ()=>{
  23. this.props.sendMsg(this.state.message)
  24. }
  25. render(){
  26. let {msg} = this.props
  27. return(
  28. <div>
  29. <div onClick={this.sendMsg}>我是子组件</div>
  30. <div>接收到父组件的数据:{msg}</div>
  31. </div>
  32. )
  33. }
  34. }
  35. export default App;

总结:在子组件标签上面自定义属性 属性值为父组件要传递的函数 在子组件内部通过props接收(函数组件通过props 类组件通过this.props) 使用props.属性名 或this.props.属性名调用传参  父组件通过函数的参数获取   简单来说就是 父组件传递给子组件一个函数 子组件调用函数并传参 

3. 兄弟组件之间的传值 

兄弟组件就不再叙述了 子组件穿给父组件 父组件接收然后传递给另一个子组件或者后续通过状态管理来传递

4.跨组件 

  1. import React,{createContext} from "react";
  2. const { Provider,Consumer} = createContext()
  3. class App extends React.Component{
  4. state={
  5. message:'我是父组件的数据'
  6. }
  7. sendMsg = (e)=>{
  8. console.log(e)
  9. }
  10. render(){
  11. return(
  12. <div>
  13. <div>我是父组件</div>
  14. <Provider value={this.state.message}>
  15. <Child></Child>
  16. </Provider>
  17. </div>
  18. )
  19. }
  20. }
  21. class Child extends React.Component{
  22. state={
  23. message:'我是子组件的数据'
  24. }
  25. render(){
  26. return(
  27. <div>
  28. <div>我是子组件</div>
  29. <Sun></Sun>
  30. </div>
  31. )
  32. }
  33. }
  34. class Sun extends React.Component{
  35. state={
  36. message:'我是孙组件的数据'
  37. }
  38. render(){
  39. return(
  40. <div>
  41. <div>{this.state.message}</div>
  42. <Consumer>
  43. {value=><span>{value}</span>}
  44. </Consumer>
  45. </div>
  46. )
  47. }
  48. }
  49. export default App;

总结:通过createContext提供的Provider,Consumer 父组件用Provider包裹 并提供value值 孙组件通过Consumer包裹 通过value函数获取 

其实和vue是很相识的  相信很多人都是有vue的基础 上手因该会很容易的 在者就是 传参肯定涉及格式校验问题了 但是和vue不同的是 没有内置 react需要借助prop-type 

下载依赖

npm i prop-types

使用  引入 然后再组件后面用PropTypes定义校验格式

  1. import PropTypes from "prop-types";
  2. Child.propTypes = {
  3. message:PropTypes.string //string number bool func object array element 常见的
  4. }

其次就是必填项 在上面的基础上 进行isRequired串联

  1. import PropTypes from "prop-types";
  2. Child.propTypes = {
  3. message:PropTypes.string,
  4. msg:PropTypes.string.isRequired //string number bool func object array element 常见的
  5. }

再者肯定是涉及到默认值了 这里分为两种方式 一种是函数组件 一种是类组件  

函数组件通过组件.deafultProps 和解构两种方式 

deafultProps

  1. function Child(props){
  2. return(
  3. <div>
  4. {props.message}
  5. </div>
  6. )
  7. }
  8. Child.defaultProps ={
  9. message:'测试'
  10. }

解构

  1. function Child({message = "测试"}){
  2. return(
  3. <div>
  4. {message}
  5. </div>
  6. )
  7. }

类组件的默认值

1.和上面一样 通过deafultProps

  1. class Child extends React.Component{
  2. state={
  3. message:'我是子组件的数据'
  4. }
  5. render(){
  6. return(
  7. <div>
  8. <div>我是子组件 {this.props.message}</div>
  9. </div>
  10. )
  11. }
  12. }
  13. Child.defaultProps ={
  14. message:'测试'
  15. }

2.使用类静态属性声明 static deafultProps 

  1. class Child extends React.Component{
  2. state={
  3. message:'我是子组件的数据'
  4. }
  5. static defaultProps ={
  6. message:'测试'
  7. }
  8. render(){
  9. return(
  10. <div>
  11. <div>我是子组件 {this.props.message}</div>
  12. </div>
  13. )
  14. }
  15. }

好了 今天的这个组件通讯,格式校验 及默认值就到这里了  后续将继续我的探索之路 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/63408
推荐阅读
相关标签
  

闽ICP备14008679号