如何将状态从一个组件传递到另一组件,以及如何修改状态?

问号

所以我有

一个名为section.js的组件:

import React from 'react';

import SectTitle from './Section_Title/Section_Title.js'
import SectContent from './Section_Content/Section_Content.js'

import classes from './Section.module.css'

const section = (props) => {
    const sectionNameMapping = {
        profile: 'Profile',
        education: 'Education',
        relevantWorkExp: 'Relevant Work Experience',
        otherWorkExp: 'Other Work Experience'
    }

    return (
        <div className={classes.Section}>
            <SectTitle title={sectionNameMapping[props.sectionName]} />
            <SectContent sectionName={props.sectionName}/>
        </div>
    )
}

export default section;

SectionTitle.js

import React,{Component} from 'react';

import classes from './Section_Title.module.css'

import expandArrow from '../../../assets/png_files/expand_arrow.png'

class SectTitle extends Component {
    state = {
        arrowClicked: false
    }

    displaySectionContents = () => {
        console.log('[displaySectionContents] Executed ... ' + this.state.arrowClicked)
        this.setState({
            arrowClicked: !this.state.arrowClicked
        })
    }

    render(){
    return (
        <div className={classes.SectionTitle}>
            <div>{this.props.title}</div>
            <div>
                <button
                 className={classes.ButtonSectTitle} 
                 onClick={this.displaySectionContents}>
                     <img className={classes.ExpandArrow} 
                      src={expandArrow} 
                      style={{transform: this.state.arrowClicked ? 'rotate(0deg)' : 'rotate(-90deg)'}}/></button></div>
           </div>
    )}
}

export default SectTitle;

SectionContent.js

import React, { Component } from 'react';

import SectionItem from './Section_Item/Section_Item.js'

import classes from './Section_Content.module.css'

class SectionContent extends Component {   
    render() {
        return (
        <div className={classes.SectionContent}>
            <SectionItem sectionName={this.props.sectionName}/>
        </div>
        )
    }
}

export default SectionContent;

和SectionItem.js

import React, { Component } from 'react';

import classes from './Section_Item.module.css';

import jsonContent from '../../../../assets/json_files/json_content.json';


class SectionItem extends Component {
    render() {
        if (Object.keys(jsonContent).includes(this.props.sectionName) && (this.props.sectionName == 'profile')) {
            return <div>{jsonContent[this.props.sectionName]}</div>
        } else {
            return <div>test</div>
        }
    }
}

export default SectionItem;

我需要在sectionTitle中设置我的扩展箭头所在的状态,并根据是否按下按钮来显示或不显示部分内容。

我是新来的反应者,我不知道该怎么做

布扎托

对于像这样的简单树,您最好将其arrowClicked和处理程序移至父级Section(将其转换为基于类的组件)。然后你作为道具传递displaySectionContentsSecTitle由于状态位于父树上,因此您可以Content基于arrowClicked状态进行条件渲染

class Section extends Component {

    state = {
        arrowClicked: false
    }

    displaySectionContents = () => {
        console.log('[displaySectionContents] Executed ... ' + this.state.arrowClicked)
        this.setState({
            arrowClicked: !this.state.arrowClicked
        })
    }

    return (
        <div className={classes.Section}>
            // pass down the arrow handler and arrowClicked
            <SectTitle title={sectionNameMapping[this.props.sectionName]} displaySectionContents={this.displaySectionContents} arrowClicked={this.props.arrowClicked}  />
             // if arrow clicked is true SectContent is rendered
            { this.state.arrowClicked && <SectContent sectionName={this.props.sectionName}/> } 
        </div>
    )
}

SectTitle成为功能组件,因为它不需要状态,并且您仅使用传递的props:

const SectTitle = (props) {
    return (
        <div className={classes.SectionTitle}>
            <div>{props.title}</div>
            <div>
                <button
                 className={classes.ButtonSectTitle} 
                 onClick={props.displaySectionContents}>
                     <img className={classes.ExpandArrow} 
                      src={expandArrow} 
                      style={{transform: props.arrowClicked ? 'rotate(0deg)' : 'rotate(-90deg)'}}/></button></div>
           </div>
    )}
}

一旦您单击按钮,props.displaySectionContents将更新父状态,并且SectionContent有权访问以arrowClicked进行正确评估

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

反应:如何将结果从一个组件传递到另一组件

来自分类Dev

在Angular中,当组件不是父/子组件时,如何将值从一个组件传递到另一组件?

来自分类Dev

如何将点击行的数据从一个组件传递到另一组件而不传递到url

来自分类Dev

灰烬:将动作从一个组件发送到另一组件

来自分类Dev

灰烬:将动作从一个组件发送到另一组件

来自分类Dev

如何正确地将道具状态从一个组件传递到另一个组件?

来自分类Dev

将状态从一个组件传递到另一个无状态组件

来自分类Dev

复合设计模式:如何将结果从一个组件传递到另一个组件?

来自分类Dev

如何将参数从一个组件传递到另一个组件

来自分类Dev

如何将数据从一个组件传递到 vue 上的另一个组件?

来自分类Dev

在ReactJs中将状态从一个组件传递到另一个组件

来自分类Dev

如何将状态传递给不同文件中的一个组件到另一个组件

来自分类Dev

React-如何将状态传递给另一个组件

来自分类Dev

如何将状态className变量传递给React中的另一个组件

来自分类Dev

React-如何将API数据从一个组件传递到另一个js文件中的另一个组件?

来自分类Dev

如何将 props(从 Redux 获取的)从一个组件传递到另一个(React/Redux)?

来自分类Dev

如何将路由器中的组件状态传递给另一个路由器组件

来自分类Dev

如何将一组值从一个 Jmeter 线程组传递到另一个

来自分类Dev

如何将计算的参数从一个Vue组件传递到另一个组件?

来自分类Dev

在React中将状态数据从一个组件传递到另一个组件

来自分类Dev

如何将数据传递给组件到另一个组件

来自分类Dev

如何从一个组件访问状态值到另一个文件中的另一个函数(不是组件)?反应 js

来自分类Dev

使用 ComponentDidUpdate 上的全局变量将状态从一个组件传递到另一个组件

来自分类Dev

如何将表单组数据传递到另一个组件中的“提交”按钮(Angular 7)

来自分类Dev

如何将参数传递给同一组件中的函数?

来自分类Dev

如何将回调从一个子组件传递到另一个

来自分类Dev

从另一个组件修改组件的状态

来自分类Dev

当我使用history.push时,如何从一个组件到另一个组件获取状态变量?

来自分类Dev

将数据从一个组件传递到另一个组件

Related 相关文章

  1. 1

    反应:如何将结果从一个组件传递到另一组件

  2. 2

    在Angular中,当组件不是父/子组件时,如何将值从一个组件传递到另一组件?

  3. 3

    如何将点击行的数据从一个组件传递到另一组件而不传递到url

  4. 4

    灰烬:将动作从一个组件发送到另一组件

  5. 5

    灰烬:将动作从一个组件发送到另一组件

  6. 6

    如何正确地将道具状态从一个组件传递到另一个组件?

  7. 7

    将状态从一个组件传递到另一个无状态组件

  8. 8

    复合设计模式:如何将结果从一个组件传递到另一个组件?

  9. 9

    如何将参数从一个组件传递到另一个组件

  10. 10

    如何将数据从一个组件传递到 vue 上的另一个组件?

  11. 11

    在ReactJs中将状态从一个组件传递到另一个组件

  12. 12

    如何将状态传递给不同文件中的一个组件到另一个组件

  13. 13

    React-如何将状态传递给另一个组件

  14. 14

    如何将状态className变量传递给React中的另一个组件

  15. 15

    React-如何将API数据从一个组件传递到另一个js文件中的另一个组件?

  16. 16

    如何将 props(从 Redux 获取的)从一个组件传递到另一个(React/Redux)?

  17. 17

    如何将路由器中的组件状态传递给另一个路由器组件

  18. 18

    如何将一组值从一个 Jmeter 线程组传递到另一个

  19. 19

    如何将计算的参数从一个Vue组件传递到另一个组件?

  20. 20

    在React中将状态数据从一个组件传递到另一个组件

  21. 21

    如何将数据传递给组件到另一个组件

  22. 22

    如何从一个组件访问状态值到另一个文件中的另一个函数(不是组件)?反应 js

  23. 23

    使用 ComponentDidUpdate 上的全局变量将状态从一个组件传递到另一个组件

  24. 24

    如何将表单组数据传递到另一个组件中的“提交”按钮(Angular 7)

  25. 25

    如何将参数传递给同一组件中的函数?

  26. 26

    如何将回调从一个子组件传递到另一个

  27. 27

    从另一个组件修改组件的状态

  28. 28

    当我使用history.push时,如何从一个组件到另一个组件获取状态变量?

  29. 29

    将数据从一个组件传递到另一个组件

热门标签

归档