亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

React Hooks:漢堡菜單 onClick 無法識別 useCallback 返回值

React Hooks:漢堡菜單 onClick 無法識別 useCallback 返回值

嗶嗶one 2023-10-20 16:10:45
我的應用程序中有一個組件可以處理兩件事,應用程序的布局(移動設備與桌面設備)以及其中的導航。這是一個類的實現。此代碼片段包含使用類編寫的組件。這就是它的樣子。但將其切換為功能性后,有兩件事停止工作:移動側抽屜無法打開和關閉。但是,如果使用傳遞硬編碼值true,當您進入移動視圖時,它確實會打開。第二個是,當路由器更改 URL 時,相應的組件不會呈現。例如/profile應該帶一個到個人資料頁面為了解決漢堡菜單問題,我嘗試使用useCallback一些我認為處理正確渲染的好策略。但無濟于事。基本上是一個總是返回正確值的函數。Open menu === true和Closed menu === false我什至設置了一個useEffect鉤子來觸發該isToggled值的日志,只是為了確保一切正常。 var useToggle = initialState => {    const [isToggled, setIsToggled] = React.useState(initialState);    const toggle = useCallback(() => setIsToggled(state => !state), [setIsToggled]);    return [isToggled, toggle];  };  var [fixed, setFixed] = useState(null);  var [isToggled, toggle] = useToggle(false);  var [Content, setContent] = useState(null);  var [isMobile, setIsMobile] = useState(false);  var [isDesktop, setIsDesktop] = useState(false);  var handleSidebarHide = () => false;   var hideFixedMenu = () => setFixed(false);  var showFixedMenu = () => setFixed(true);  useEffect(() => {    console.log('isToggled', isToggled);  }, [isToggled]);這是完整的組件:import React, { useCallback, useState, useEffect, useContext } from 'react';import { Link, NavLink } from 'react-router-dom';import Modal from '../components/Modal/MyModal.jsx';import {  Container,  Menu,  Responsive,  Segment,  Visibility,  Sidebar,  Icon,  Button} from 'semantic-ui-react';
查看完整描述

1 回答

?
慕桂英546537

TA貢獻1848條經驗 獲得超10個贊

看起來我忘記了這個布局及其更改為功能版本的一個重要方面!


除了處理由于瀏覽器寬度變化而導致的組件不同布局之外,我忘記在功能鉤子中添加其他重要的依賴項useEffect(漢堡包側面板、模式功能等)。特別是fixed, children, isToggled, modalActive。


當我繼續引用prop/state它所依賴的那些值的類版本時,功能組件的外觀和感覺自然會比原始版本(類版本)有所改進。


這是僅使用鉤子 \o/ 的新更新版本


import React, { useCallback, useState, useEffect, useContext } from 'react';

import { Link, NavLink } from 'react-router-dom';

import Modal from '../components/Modal/MyModal.jsx';

import {

  Container,

  Menu,

  Responsive,

  Segment,

  Visibility,

  Sidebar,

  Icon,

  Button

} from 'semantic-ui-react';


import { connect } from 'react-redux';

import { modalStateOn, modalStateOff } from '../store/reducers/ui/index';


import UserContext from '../components/UserContext/UserContext.jsx';


const getWidth = () => {

  const isSSR = typeof window === 'undefined';

  return isSSR ? Responsive.onlyTablet.minWidth : window.innerWidth;

};


function logOutMenuItemHelper(

  isMobile,

  isLoggedIn,

  history,

  modalActive,

  nav,

  NavLink,

  modalStateOn,

  modalStateOff,

  handleSidebarHide


查看完整回答
反對 回復 2023-10-20
  • 1 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號