使用 React && styled-components 中的 State 从两个不同的按钮触发侧边栏

Posted

技术标签:

【中文标题】使用 React && styled-components 中的 State 从两个不同的按钮触发侧边栏【英文标题】:Trigger Sidebar from two different button using State in React && styled-components 【发布时间】:2022-01-16 13:58:42 【问题描述】:

第一个按钮:

const [open, setOpen] = useState(false);
  return (
    <>
      <SideCart open=open />
      <CartButton open=open onClick=() => setOpen(!open)>
      )
    </>

侧边栏:

const [hide, setHide] = useState(open ? true : true);
  return (
    <SidecartContainer open=open hide=hide>

       // Thats the second button 
       // I want to close the sidebar component with this button
      <ExitButton hide=hide onClick=() => setHide(!hide)>
    </SidecartContainer>

const SidecartContainer = styled.div`
  transform: $( open, hide ) =>
    open && hide ? "translateX(0)" : "translateX(100%)";
`;

我有一个按钮触发侧边栏的打开状态,当它打开时我有一个 x 按钮来关闭侧边栏。

它只工作一次。

当我点击打开按钮打开然后点击关闭隐藏时我应该使用什么?

它是用样式组件制作的。

【问题讨论】:

【参考方案1】:

我认为你的问题是这条线const [hide, setHide] = useState(open ? true : true); 只在组件安装上运行一次。您需要的是侧边栏中的 useEffect 来监听对 open 的更改并将它们应用到 hide 状态,如下所示:

const [hide, setHide] = useState(open ? true : true);

useEffect(() => 
  setHide(!open);
, [open]);

  return (
    <SidecartContainer open=open hide=hide>

--------Thats the second button 
--------I want to close the sidebar component with this button
      <ExitButton hide=hide onClick=() => setHide(!hide)>


    </SidecartContainer>

【讨论】:

不,这并没有真正起作用..谢谢【参考方案2】:

我终于找到了正确的方法并且它有效。

首先我在侧边栏之外声明了 useStates 逻辑:

  const [open, setOpen] = useState("");
  const hide = () => setOpen("translateX(100%)");
  const show = () => setOpen("translateX(0)");

然后我将 props 传递给 Sidecart.js:

const SideCart = (props) => 
  return (
    <SidecartContainer transform=props.transform open=props.open>
      <ExitButton open=props.open onClick=props.onClick>
        <CloseIcon />
      </ExitButton>
      <ProductCards>
        <CartProductCard />
      </ProductCards>
      <Total></Total>
    </SidecartContainer>
  );
;

这也很重要,在样式化组件 css 中我声明了 prop 值:

const SidecartContainer = styled.div`
  transform: $(props) => props.transform;
`;

最后我相应地更改了 onClick 函数:

  <SideCart transform=open open=open onClick=hide />
  <CartButton open=open onClick=show>

【讨论】:

以上是关于使用 React && styled-components 中的 State 从两个不同的按钮触发侧边栏的主要内容,如果未能解决你的问题,请参考以下文章

从 React 应用程序加载 Sass 并将 CSS 文本注入到父文档中

React项目的基本流程&redux的用法原理

NextJs - 导出使用样式组件的应用程序时出错

React 的样式化组件 vs jss vs 情感

使用带有样式组件和主题的 react-test-renderer (React Native)

反应原生和打字稿多内联样式