【问题标题】:How do I toggle sidebar on React如何在 React 上切换侧边栏
【发布时间】:2021-03-21 14:50:24
【问题描述】:

我有一个之前用 Jquery 做过的切换示例。现在我想用 react 来做,但我不知道怎么做。

我将我的 Jquery 代码和 React 设计代码放在下面。

React 设计代码

Sidebar.js

`

import React from 'react';
import profileImage from '../../../assets/img/profil.jpg';
import iconImage from '../../../assets/img/icon.jpg';
import businessManImage from '../../../assets/img/business-man-white.svg';
import preferencessImage from '../../../assets/img/cogs-white.svg';
import logoutImage from '../../../assets/img/logout.svg';
import toggleImage from '../../../assets/img/toggle-icon.png';
import profileWhite from '../../../assets/img/profile-white.svg';
import classes from '../Sidebar/Sidebar.module.css';

const Sidebar = (props) => {
  let url = ""
  return (
    <div>
      <div className={classes['side-bar']}>
        <div className={classes['side-bar-top']}>
          <div className={classes['side-bar-icon']}>
            <img src={iconImage} alt="profileresmi" />
          </div>
        </div>


        <div className={classes['side-bar-row']} style={{height: '100px'}} >
          <div className={classes['side-bar-icons']} style={{width: '100px'}} >
            <div className={classes['side-bar-profile-image']}>
              <img src={profileImage} alt="profileresmi" />
            </div>
          </div>
          <div className={classes['side-bar-profile-content']}>
            <h3><b>Mert EKİNCİ</b></h3>
            <h4>mert@akturk.de</h4>
          </div>
        </div>

        <div className={classes['side-bar-row']}>
          <div className={classes['side-bar-icons']}>
            <a href={url} className={classes['side-bar-elements-icons']}>
              <img src={businessManImage} alt="profileresmi" />
            </a>
          </div>
          <div className={classes['side-bar-text']}>
            <a href={url}>Processes</a>
          </div>
        </div>

        <div style={{ clear: 'both' }} ></div>
        <div className={classes['side-bar-row']}>
          <div className={classes['side-bar-icons']}>
            <a href={url} className={classes['side-bar-elements-icons']}>
              <img src={preferencessImage} alt="profileresmi" />
            </a>
          </div>
          <div className={classes['side-bar-text']}>
            <a href={url}>Preferences</a>
          </div>
        </div>

        <div className={classes['side-bar-row']}>
          <div className={classes['side-bar-icons']}>
            <a href={url} className={classes['side-bar-elements-icons']}>
              <img src={profileWhite} alt="profileresmi" />
            </a>
          </div>
          <div className={classes['side-bar-text']}>
            <a href={url}>User</a>
          </div>
        </div>

        <div className={classes['side-bar-row']}>
          <div className={classes['side-bar-icons']}>
            <a href={url} className={classes['side-bar-elements-icons']}>
              <img src={logoutImage} alt="profileresmi" />
            </a>
          </div>
          <div className={classes['side-bar-text']}>
            <a href={url}>Logout</a>
          </div>
        </div>

      </div>
      <div className={classes['side-toggle']}>
        <span className={classes['side-bar-toggle']} >
          <img src={toggleImage} alt="profileresmi" />
        </span>
      </div>
    </div>

  );
}

export default Sidebar;

`

在这里,我通过隐藏和显示我的 div 来进行切换。

Jquery 侧边栏切换代码

Script.js

`

var isToggled = true;

var toggleDelay = 50;

var onclickSideToggle = function () {
    isToggled = !isToggled;
    toggleSidebar(isToggled);
};


$('#side-bar-toggle').on('click', onclickSideToggle);

var toggleSidebar = function (toggle) {

    if (toggle) {
        $('.side-bar-text').show(toggleDelay);
        $('.side-bar-profile-content').show(toggleDelay);

    } else {
        $(".side-bar-text").hide(toggleDelay);
        $('.side-bar-profile-content').hide(toggleDelay);

    }
};

`

你能给我一些关于如何用 React 做的信息吗?

【问题讨论】:

    标签: reactjs react-redux react-hooks react-css-modules react-toggle


    【解决方案1】:

    如果您只想隐藏/显示而不需要任何动画,您可以使用以下方法。 有关 useState 钩子使用的更多信息,您可以在这里找到:https://reactjs.org/docs/hooks-reference.html#usestate

    import React, { useState } from 'react';
    import profileImage from '../../../assets/img/profil.jpg';
    import iconImage from '../../../assets/img/icon.jpg';
    import businessManImage from '../../../assets/img/business-man-white.svg';
    import preferencessImage from '../../../assets/img/cogs-white.svg';
    import logoutImage from '../../../assets/img/logout.svg';
    import toggleImage from '../../../assets/img/toggle-icon.png';
    import profileWhite from '../../../assets/img/profile-white.svg';
    import classes from '../Sidebar/Sidebar.module.css';
    
    const Sidebar = props => {
        const [isContentToggled, setIsContentToggled] = useState(true);
    
        let url = ""
        return (
            <div>
                <div className={classes['side-bar']}>
                    <div className={classes['side-bar-top']}>
                        <div className={classes['side-bar-icon']}>
                            <img src={iconImage} alt="profileresmi" />
                        </div>
                    </div>
    
    
                    <div className={classes['side-bar-row']} style={{height: '100px'}} >
                        <div className={classes['side-bar-icons']} style={{width: '100px'}} >
                            <div className={classes['side-bar-profile-image']}>
                                <img src={profileImage} alt="profileresmi" />
                            </div>
                        </div>
                        {isContentToggled && (
                            <div className={classes['side-bar-profile-content']}>
                                <h3><b>Mert EKİNCİ</b></h3>
                                <h4>mert@akturk.de</h4>
                            </div>
                        )};
                    </div>
    
                    <div className={classes['side-bar-row']}>
                        <div className={classes['side-bar-icons']}>
                            <a href={url} className={classes['side-bar-elements-icons']}>
                                <img src={businessManImage} alt="profileresmi" />
                            </a>
                        </div>
                        {isContentToggled && (
                            <div className={classes['side-bar-text']}>
                                <a href={url}>Processes</a>
                            </div>
                        )}
                    </div>
    
                    <div style={{ clear: 'both' }} ></div>
                    <div className={classes['side-bar-row']}>
                        <div className={classes['side-bar-icons']}>
                            <a href={url} className={classes['side-bar-elements-icons']}>
                                <img src={preferencessImage} alt="profileresmi" />
                            </a>
                        </div>
                        {isContentToggled && (
                            <div className={classes['side-bar-text']}>
                                <a href={url}>Preferences</a>
                            </div>
                        )}
                    </div>
    
                    <div className={classes['side-bar-row']}>
                        <div className={classes['side-bar-icons']}>
                            <a href={url} className={classes['side-bar-elements-icons']}>
                                <img src={profileWhite} alt="profileresmi" />
                            </a>
                        </div>
                        {isContentToggled && (
                            <div className={classes['side-bar-text']}>
                                <a href={url}>User</a>
                            </div>
                        )}
                    </div>
    
                    <div className={classes['side-bar-row']}>
                        <div className={classes['side-bar-icons']}>
                            <a href={url} className={classes['side-bar-elements-icons']}>
                                <img src={logoutImage} alt="profileresmi" />
                            </a>
                        </div>
                        {isContentToggled && (
                            <div className={classes['side-bar-text']}>
                                <a href={url}>Logout</a>
                            </div>
                        )}
                    </div>
    
                </div>
                <div className={classes['side-toggle']}>
                <span onClick={() => setIsContentToggled(prevIsContentToggled => !prevIsContentToggled)} className={classes['side-bar-toggle']}>
                    <img src={toggleImage} alt="profileresmi" />
                </span>
                </div>
            </div>
    
        );
    }
    
    export default Sidebar;
    

    如果你想用动画来切换代码几乎是一样的。 您只需要创建一些额外的类名,如 .hidden 以及隐藏元素的样式并替换

    {isContentToggled && (
           <div className={classes['side-bar-profile-content']}>
                <h3><b>Mert EKİNCİ</b></h3>
                <h4>mert@akturk.de</h4>
           </div>
    )};
    

    根据 isContentToggled 值添加/删除此类名称。

    【讨论】:

    • 抱歉,因为我的分数,我不能投票。非常感谢您的回答,效果很好。
    猜你喜欢
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多