【问题标题】:Typescript and Emotion js, conditional propsTypescript 和 Emotion js,条件道具
【发布时间】:2020-08-09 12:44:49
【问题描述】:

基本上在我的 redux 商店中,我有一个布尔状态,我在应用 css 时通过道具使用条件 但出于某种原因我的:

  背景:$ {(props: HamburguerProps) => (props.open?'red': '粉红色')};

即使状态为真或假,也始终保持红色

多伦多证券交易所:

interface RootState {
  sideBarStatus: boolean;
}

interface SideBar {
  isOpen: boolean;
}

const LogoNavigation: React.FC<SideBar> = ({ isOpen }) => {
  const dispatch = useDispatch();
  return (
    <LogoSide open={isOpen} xd={isOpen ? 'blue' : 'pink'}>
      <img src={Logo} alt="Logo Elo Ghost" />
      <Hamburguer
        open={isOpen}
        onClick={() => dispatch(toggleSide(!isOpen))}
      >
        <div />
        <div />
        <div />
      </Hamburguer>
    </LogoSide>
  );
};
const SideNavigation: React.FC = () => {
  // const { sideIsOpen } = useSelector((RootState) => RootState.toggleSide);
  const selectIsOpen = (state: RootState) => state.sideBarStatus;
  const sideBarStatus = useSelector(selectIsOpen);
  console.log('sideBar', sideBarStatus);
  return (
    <SideNav>
      <LogoNavigation isOpen={sideBarStatus} />
    </SideNav>
  );
};

CSS:

import styled from '@emotion/styled';

type HamburguerProps = {
  open: boolean;
};
export const LogoSide = styled.div<HamburguerProps>`
  display: flex;
  position: relative;
  justify-content: space-between;
  align-items: center;
  width: 100%;
  height: 60px;
  background: ${(props: HamburguerProps) => (props.open ? 'red' : 'pink')};
  img {
    height: 50px;
  }
`;

一个示例 gif,我展示了我的状态从 true 变为 false,但我的风格没有改变:

示例:

https://codesandbox.io/s/great-galileo-zp3e7?file=/src/

【问题讨论】:

    标签: reactjs typescript emotion


    【解决方案1】:

    isOpen 不是boolean,它是一个包含sideIsOpen 键和boolean 值的对象。 object 总是真实的,这就是为什么你的背景总是红色

    open={isOpen.sideIsOpen}
    

    甚至更好 - 对选择器使用解构:

    const { sideIsOpen } = useSelector(selectIsOpen);
    
    isOpen={sideIsOpen}
    

    【讨论】:

    • 我得到了这个属性 'sideIsOpen' 在类型 'boolean' 上不存在。
    • @Felipe 因为您还必须调整您的界面。检查我的编辑:)
    • 我用所有我做不到的代码编辑了答案,你能帮帮我吗?
    • @Felipe 你能更新你的代码框并将链接传递给我吗?我会帮你解决的
    猜你喜欢
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2022-01-05
    • 2020-08-07
    • 2021-07-26
    • 2021-06-29
    相关资源
    最近更新 更多