美文网首页
react的子组件向父组件传值

react的子组件向父组件传值

作者: 水晶草720 | 来源:发表于2022-03-22 10:30 被阅读0次

子传父:回调函数 this.props.event() ,父组件接受 event={this.handleEvent}
看如下案例:


示例图片

点击按钮控制左侧菜单的显示和隐藏

import React, { Component } from 'react'
import  './../01-base/css/01-index.css'
class Navbar extends Component {
    render() {
        return <div style={{ background: "red" }}>
            <button onClick={() => {
                this.props.event()
              }}>click</button>
                <ul className="topNav">
                    <li>Home</li>
                    <li>Home</li>
                    <li>Home</li>
                    <li>Home</li>
                    <li>Home</li>
                </ul>
            </div>
    }
}
class Sidebar extends Component {
    render() {
        return <div  className="leftNav">
                <ul>
                    <li>left</li>
                    <li>left</li>
                    <li>left</li>
                    <li>left</li>
                </ul>
            </div>
    }
}

export default class App extends Component {
    state = {
        IsShow: true,
    }
    handleEvent = () => {
        console.log("父组件定义的event事件")
        this.setState({IsShow: !this.state.IsShow})
    }
  render() {
    return (
        <div>
            <Navbar event={this.handleEvent} />
            {this.state.IsShow && <Sidebar />}
      </div>
    )
  }
}
/**
 * 子传父:回调函数 event
 */

下面接着看子组件通过this.props.事件名称 传值给父组件,父组件通过this.props.属性名 传值给子组件的例子
效果如下:
上面的navbar 和下面的tabbar分别是两个子组件,实现点击子组件,选项切换内部组件,点击center同时切换到center组件和高亮选择下班的tabbar的center选项


示例图片
父组件
import React, { Component } from 'react'
import './../01-base/css/01-index.css'
import Film from '../01-base/components/Film'
import Cinemas from '../01-base/components/Cinema-2'
import Center from '../01-base/components/Center'
import NavBar from './components/Navbar'
import TabBar from './components/Tabbar'
export default class app extends Component {
    state = {
        list: [
            {
                id: 1,
                text: "电影"
            },
            {
                id: 2,
                text: "影院"
            },
            {
                id: 3,
                text: "我的"
            }
        ],
        current: 0
    }
    which() {
        switch (this.state.current) {
            case 0: return <Film></Film>
            case 1: return <Cinemas></Cinemas>
            case 2: return <Center></Center>
            default: return null
        }
    }
    render() {
        return (
            <div>
                <NavBar myevent={() => {
                    console.log("center")
                    this.setState({
                        current: 2
                    })
                }} />
                {this.which()}
                <TabBar myevent={
                    (index) => {
                        this.setState({
                            current: index
                        })
                    }
                } current={this.state.current} list={this.state.list}></TabBar>
            </div>
        )
    }
}

子组件navbar

import React, { Component } from 'react'
import './../../01-base/css/01-index.css'
export default class Navbar extends Component {
    render() {
        return (
            <div className="navbar" style={{ background: "yellow" }}>
                <button>back</button>
                <span>卖座电影</span>
                <button onClick={() => {
                    this.props.myevent()
                }}>center</button>
            </div>
        )
    }
}

子组件 tabbar
import React, { Component } from 'react'
import './../../01-base/css/01-index.css'
export default class app extends Component {
    render() {
        return (
            <div>
                <ul className="tab">
                    {
                        this.props.list.map((item, index) =>
                            <li key={item.id} onClick={() => this.handleClick(index)} className={this.props.current === index ? 'active' : ''}>{item.text}</li>
                        )
                    }
                </ul>
                <div>
                </div>
            </div>
        )
    }
    handleClick = (index) => {
        this.props.myevent(index)
    }
}

子组件 tabbar的函数式写法
const TabBar = (props) => {
    return (
        <div>
            <ul className="tab">
                {
                    props.list.map((item, index) =>
                        <li key={item.id} onClick={() => handleClick(index)} className={props.current === index ? 'active' : ''}>{item.text}</li>
                    )
                }
            </ul>
            <div>
            </div>
        </div>
    )
    function handleClick(index) {
        props.myevent(index)
    }
}
export default TabBar;

相关文章

  • ReactNative组件间的通信

    父组件向子组件通信 父组件向子组件传值 父组件向子组件传递方法 子组件向父组件通信 子组件向父组件传值 子组件向父...

  • Vue.js父子组件传值

    父组件向子组件传值: 子组件向父组件传值:

  • vue不同组件间传值方式

    父传子子传父非父子传值 1.父组件向子组件进行传值 父组件: 子组件: 2.子组件向父组件传值 子组件: 父组件:...

  • vue、react对比

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

  • Vue.js父子组件和非父子组件间的传值通信

    [toc] 父子组件的传值通信 父组件向子组件传值 父组件: 子组件: 子组件向父组件传值 Note 子组件不能直...

  • vue 中传值(父传子、子传父(传递多个事件)、eventBus

    1.0 父传子 父组件向子组件传值:子组件用props:['值'] 接收 ; 2.0 子传父 子组件向父组件传值 ...

  • Vue - 传值

    Vue 传值有两种:1)父组件向子组件传值(属性传值,Prop传值)2)子组件向父组件传值 一、父组件向子组件传值...

  • vue单文件父子组件之间的通信

    主要笔记内容: 父组件向子组件传值; 子组件向父组件传值; 一、父组件向子组件传值: 步骤:1、父组件向下传递数据...

  • vue 组件之间传值方法

    1. 父组件向子组件传值 父组件: 子组件: 2. 子组件向父组件传值 子组件: 父组件: 3. 非父子之间传值 ...

  • 子组件向父组件传值

    子组件向父组件传值 思路:子组件向父组件传值,可以通过调用父组件的方法,来变相的传值 父组件向子组件传递方法 父元...

网友评论

      本文标题:react的子组件向父组件传值

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