【问题标题】:How do I pass a variable/literal for a value in styled components?如何为样式组件中的值传递变量/文字?
【发布时间】:2022-10-24 08:41:43
【问题描述】:

我总是使用道具,因为它是管理不同用例的基本方法,但我正在尝试更改边框颜色在焦点状态期间样式化的输入(是否可以将道具分配给焦点状态?)。

我熟悉使用道具,但即使在样式组件中,我也无法分配给变量。我不能说{props => props.focused ? accentCol : null}。我能够分配变量的唯一方法是通过内联样式。但是,afaik 无法通过内联样式访问焦点状态:/

const accentCol = `{some redux function which retrieves different colors in different scenarios`

const styledInput = styled.input`
  background: #181a1a;
  border: 1px solid rgba(255, 255, 255, 0.4);
  &::placeholder {
  }
  &:focus {
    outline: none !important;
    border: solid 2px accentCol !important;
  }
`

如何将边框颜色分配给变量?

【问题讨论】:

  • 你读过文档吗?有什么不清楚的?传递 props 是样式化组件的基本用法。 styled-components.com/docs/basics#adapting-based-on-props
  • 我熟悉使用道具,但即使在样式组件中我也无法分配给变量。我不能说{props => props.focused ? accentCol : null}。我能够分配给变量的唯一方法是通过内联样式。但是,afaik 无法通过内联样式访问焦点状态,因此我要询问堆栈溢出:(

标签: javascript css reactjs typescript styled-components


【解决方案1】:

按照文档说明:

const StyledInput = styled.input`
  &:focus {
    outline: none;
    border: solid 2px ${(props) => props.focusBorder};
  }
`;

function App() {
  return (
    <>
      <StyledInput focusBorder="red" />
      <StyledInput focusBorder="blue" />
    </>
  );
}

https://codesandbox.io/s/styled-focus-etf4pd

【讨论】:

  • 您能否为打字稿编辑此内容?它给了我一个No overload matches this call 错误
【解决方案2】:
interface IProps {
  focus: string,
}

const variantsfocus = {
  primary: 'solid 2px accentCol',
};

const StyledInput = styled.input<IProps>`
  background: #181a1a;
  border: 1px solid rgba(255, 255, 255, 0.4);
  &::placeholder {
  }
  &:focus {
    outline: none !important;
    border: ${props => variantsfocus[props.focus]};
  }
`

我希望这会有所帮助,您必须在组件中传递道具,例如

<StyledInput focus="primary" />

This link may be helpful also

【讨论】:

  • 您能否为打字稿编辑此内容?它给了我一个No overload matches this call 错误——
  • 我已经更新了代码,请检查@NickV
  • 我希望这个link 会有所帮助,谢谢@NickV
猜你喜欢
  • 2019-04-15
  • 2022-11-15
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
相关资源
最近更新 更多