簡體   English   中英

如何在狀態中將一個值設置為“ on”,將其他所有值設置為“ off”?

[英]How can I set one value as “on” and everything else as “off” in state?

我試圖設置我的應用程序的狀態,其中狀態對象中有3個鍵值對。 我只想將一個設置為“開”,將其余設置為“關”。

onMenuClick = (leafName) => {

        this.setState(Object.assign({}, {
            news: "off",
            tournament: "off",
            register: "off",
        }, { leafName: "on" }))

    }

import React from 'react'
import './Leaf.css'
import { Link } from 'react-router-dom'




const Leaf = ({ leafName, state, onMenuClick }) => {

    return (

        <div onClick={() => onMenuClick(leafName)} className={`leaf ${state}`}>
            <Link className="a" to={leafName}>{ leafName.toUpperCase() }</Link>
        </div>



    )

}


export default Leaf

import React from 'react'
import './Menu.css'
import Leaf from '../Leaf/Leaf'



class Menu extends React.Component {

    constructor() {
        super()

        this.state = {
            news: "off",
            tournament: "off",
            register: "off",
        }
    }

    onMenuClick = (leafName) => {

        this.setState(Object.assign({}, {
            news: "off",
            tournament: "off",
            register: "off",
        }, { leafName: "on" }))

    }

    render() {

        return (
            <div className="menu">
                <Leaf onMenuClick={this.onMenuClick} leafName="news" state={this.state.news} />
                <Leaf onMenuClick={this.onMenuClick} leafName="tournament" state={this.state.tournament} />
                <Leaf onMenuClick={this.onMenuClick} leafName="register" state={this.state.register} />
            </div>
        )

    }

}
export default Menu

應該是菜單導航。 如果我單擊其中之一,則應激活我單擊的那一項,而其余應禁用。 而且它不起作用。

不要按情況存儲狀態。 它比您需要管理的要多。

存儲已打開的那個,然后在需要時將當前的葉子名稱與其進行比較。 例如

onMenuClick = (leafName) => {
    this.setState(Object.assign({}, {
        on: leafName,
    }));
};

const Leaf = ({ leafName, state, onMenuClick }) => {
    return (
        <div onClick={() => onMenuClick(leafName)} className={`leaf ${leafName === state.on ? "on" : "off"}`}>
            <Link className="a" to={leafName}>{ leafName.toUpperCase() }</Link>
        </div>
    )
}

將leafName放在setState的方括號中:

{ [leafName]: “on” }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM