美文网首页
react组件传值

react组件传值

作者: 读心的心 | 来源:发表于2019-11-13 17:11 被阅读0次
父组件向子组件传值
  1. 通过父组件的props属性向子组件传值

子组件:Children.js

import React, { Component } from 'react';
export default class Children extends Component {
    constructor(props) {
        super(props)
        this.state = {
            name: '',
        }
    }
    render() {
        return (
            <div>
                {this.props.parent}
            </div>
        )
    }
}

父组件:Parent.js

import React, { Component } from 'react'
import Children from './Children'

export default class Parent extends Component {
    constructor(props) {
        super(props)
        this.state = {
            data: "父组件内容"
        }
    }
    render() {
        return (
            <div>
                <Children parent={this.state.data} />
            </div>
        )
    }
}
  1. 通过context进行传值
子组件:
import React from 'react'
import PropTypes from 'prop-types'

class ChildComponent extends React.Component {
  // 声明需要使用的Context属性
  static contextTypes = {
    propA: PropTypes.string
  }
  
  render () {
    const {
      propA,
      methodA
    } = this.context
    
    console.log(`context.propA = ${propA}`)  // context.propA = propA
    console.log(`context.methodA = ${methodA}`)  // context.methodA = undefined
    
    return <div>
        
    </div>
  }
}

export default ChildComponent

父组件:
import React from 'react'
import PropTypes from 'prop-types'
import ChildComponent from "./Children_children"
class MiddleComponent extends React.Component {
  render () {
    return <ChildComponent />
  }
}

class ParentComponent extends React.Component {
  // 声明Context对象属性
  static childContextTypes = {
    propA: PropTypes.string,
    methodA: PropTypes.func
  }
  
  // 返回Context对象,方法名是约定好的
  getChildContext () {
    return {
      propA: 'propA',
      methodA: () => 'methodA'
    }
  }
  
  render () {
    return <MiddleComponent />
  }
}

export default ParentComponent
子组件向父组件传值

子组件:

import React, { Component } from 'react';
export default class Children extends Component {
    constructor(props) {
        super(props)
        this.state = {
            name: '',
        }
    }
    render() {
        return (
            <div>
                这是父组件传值内容:{this.props.parent}
                <br />
                <input type="text" onChange={e => { this.props.hanldeChange(e.target.value) }} />
            </div>
        )
    }
}

父组件:

import React, { Component } from 'react'
import Children from './Children'

export default class Parent extends Component {
    constructor(props) {
        super(props)
        this.state = {
            data: "父组件内容",
            text: ""
        }
    }
    handleChange(text) {
        this.setState({
            data: text
        })
    }
    render() {
        return (
            <div>
                <p>这是子组件传过来的内容:{this.state.text}</p>
                <Children parent={this.state.data} hanldeChange={this.handleChange.bind(this)} />
            </div>
        )
    }
}

父组件定义的handleChange函数,通过props属性传给子组件。子组件接收并执行handleChange函数,实现子组件向父组件传值。

跨组件传值

使用context实现跨组件传值(当结构复杂时,全局变量不利于追溯数据的源头,会导致应用混乱,不易于维护)

使用场景:是全局性的信息,如用户信息,界面颜色和主题等等。

import React, { Component } from "react";
import PropTypes from "prop-types";
//子(孙)组件
class Button extends React.Component {
  render() {
    console.log(this.context)
    return (
      <div>
        <button style={{ background: this.context.color }}>
          {this.props.children}
        </button>
        <p>{this.context.text}</p>
      </div>
    );
  }
}
//声明contextTypes用于访问MessageList中定义的数据
Button.contextTypes = {
  color: PropTypes.string,
  text:PropTypes.string
};

//子组件
class Message extends React.Component {
  render() {
    return (
      <div>
        <Button>Delete</Button>
      </div>
    );
  }
}
//父组件
class MessageList extends React.Component {
  // 定义Context需要实现的方法
  getChildContext() {
    return {
      color: "red",
      text: "跨组件传值"
    };
  }

  render() {
    return <Message />;
  }
}

// 声明Context类型
MessageList.childContextTypes = {
  color: PropTypes.string,
  text: PropTypes.string
};
class App extends Component {
  render() {
    return <div>
      <MessageList />
    </div>
  }
}
export default App




相关文章

  • react子组件向父组件传值

    相关资料:react 父组件怎么获取子组件的这个值React组件间信息传递方式react同级组件之间传值 • 父...

  • react-父子组件间通信

    React-父子组件间通信 父组件传 值 给子组件, 传 方法 给子组件 子组件接收 值 ,触发父组件的 方法

  • Props、State

    Props属性实现组件传值 Props是properties的简写。通过Props可以组件传值如下例子 React...

  • Vue和React组件通信的总结

    在现代的三大框架中,其中两个Vue和React框架,组件间传值方式有哪些? 组件间的传值方式 组件的传值场景无外乎...

  • react 父子组件传值(兄弟传值)

    react中父子组件传值 父向子: 父组件通过自定义属性向子组件传值,子组件通过this.props.属性名接收子...

  • React入门(二)组件

    本节知识点 (1)React组件化 (2)React父子组件传值 (一)组件 在React中组件都是对应的一个个类...

  • react-native 父子组件之间传值

    1.父组件传值给子组件 父组件给子组件传值 react 和vue都是很相似的 , 很简单 1.父组件引入子组件im...

  • 学习react的第二天(1)

    react组件传值 为了防止数据乱流,react规定,不借助外力,只支持父子传值 父 -> 子 1. 在父元素中,...

  • vue、react对比

    一、父子通信 1. 父组件通过props向子组件传值 vue:父组件 子组件接收 react:父组件: 子组件: ...

  • react 组件之间通讯传值的多种方法实现

    react组件传值,大概有下面几种方法: props context redux react-router 路由切...

网友评论

      本文标题:react组件传值

      本文链接:https://www.haomeiwen.com/subject/prkkictx.html