使用样式化组件,为什么条件样式无法访问道具?

With Styled Components, why does a conditional style not have access to props?

使用样式化组件我有以下内容:

const StyledTextArea = styled.textarea`
  color: ${(props) => props.theme.colors.black};

  font-size: 24px;

  ${({ error }) => error && `
    // border-color: red; // for testing to confirm props issue
    border-color: ${(props) => props.theme.colors.red[1]};
  `}

`;

  <StyledTextArea
    error={error}
  />

正在通过主题正确设置文本区域颜色。

当 prop error 设置为 true 时,注释掉的 border-color 可以正常工作,但是使用 props 的动态线在条件下不再有效:

border-color: ${(props) => props.theme.colors.red[1]};

为什么条件好像不能访问道具?

有几种方法可以解决这个问题,最简单的方法是将主题放在原始参数中并从那里使用它。

${({ error, theme }) => error && `
    // border-color: red; // for testing to confirm props issue
    border-color: ${theme.colors.red[1]};
`}

您还可以根据 error 显式设置 border-color:

const StyledTextArea = styled.textarea`
  color: ${(props) => props.theme.colors.black};
  font-size: 24px;
  border-color: ${(props) => props.error ? 'red' : 'inherit';
`;