簡體   English   中英

點擊時反應折疊專業側邊欄

[英]React collapse pro-sidebar on click

我是 React 的新手。 我有一個 react-pro-sidebar,我想在點擊時關閉/打開:

export default function MaterialLayout(props) {
 const { children } = props;
 const classes = useStyle();
 function CollapseSide() {
   document.getElementById('pro1').collapsed=!document.getElementById('pro1').collapsed;
 }
 
 return (
   <ThemeProvider theme={theme}>
     <CssBaseline /> <Header />
     <ProSidebar id='pro1' onClick={CollapseSide} collapsed={false}>
....
....

我究竟做錯了什么

使用document.getElementById('pro1').collapsed ,您將在實際渲染的 DOM 節點上設置屬性,而不是在 React 節點上。

您可以嘗試以下方法

export default function MaterialLayout(props) {
 const { children } = props;
 const classes = useStyle();

 const [ sideCollapsed, setSideCollapsed ] = useState(false);
 const toggleSideCollapsed = useCallback(() => {
   console.log('toggle')
   setSideCollapsed(collapsed => !collapsed)
 }, [ setSideCollapsed ]) // could leave this empty
 
 return (
   <ThemeProvider theme={theme}>
     <CssBaseline />
     <Header />
     <ProSidebar onClick={toggleSideCollapsed} collapsed={sideCollapsed}>
....
....

但是我不確定ProSidebar是否采用onClick屬性。 您可以使用console.log語句並檢查您的控制台來驗證這一點。

有關更多解釋,您可以查看有關useStateuseCallback的 React 文檔,或者只是在評論中詢問:)

你能試試這個代碼,讓我知道它是否有效嗎?

export default function MaterialLayout(props) {
    const { children } = props;
    const classes = useStyle();
    const [toggled, setToggled] = useState(false);
    const [collapsed, setCollapsed] = useState(true);
    const handleToggle = () => {
        setToggled(!toggled);
        setCollapsed(!collapsed);
    }

    return (
        <ThemeProvider theme={theme}>
        <CssBaseline /><Header />
        <ProSidebar collapsed={collapsed} toggled={toggled} onToggle={handleToggle}>
        ...rest of content...
    )
}

暫無
暫無

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

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