reactjs - 您可以将 React useState 状态对象传递给使用 Tailwind 和 twin.macro 的样式化组件吗?
问题描述
以下 Vue 代码有效。我正在尝试将其翻译为 React。我感兴趣的关键功能是能够通过改变状态来切换顺风类。在这种情况下,通过将 Tailwind 的显示属性从块更改为隐藏来切换显示或隐藏 div 的布尔值:
<template>
<header>
<button @click="isOpen = !isOpen" type="button" class="...">My Button</button> // toggle state
<div :class"isOpen ? 'block' : 'hidden'" class="px-2 pt-2 pb-4"> //show and hide div
</header>
</template>
<script>
export default {
data() {
return {
isOpen: false, // set state
}
},
}
</script>
这是我在 React 中使用 Tailwindcss 和 twin.macro(Tailwind 和 Styled Components 的组合)使用 React 的 useState Hook 的地方:
export default function Header() {
const [isOpen, setIsOpen] = useState(false); // declare state
return (
<Wrapper>
<ButtonWrap type="button" onClick={() => setIsOpen(!isOpen)}> // toggle state
My Button
</ButtonWrap>
<StyledDiv>How do I toggle a style in this?</StyledDiv> // show and hide div
</Wrapper>
)
}
const Wrapper = styled.div`
${tw`container shadow`};
`
const ButtonWrap = styled.button`
${tw`block text-mycolor hover:text-myothercolor focus:text-myothercolor`}
`
const StyledDiv= styled.div<Props>`
display: ${(props) => props.myProp ? 'block' : 'hidden'; // Does NOT work
`
显然,这不起作用,因为它使用的是道具而不是状态,并且使用 Tailwind,因为您不能使用 display:block/hidden。
请注意,问题不在于隐藏 div,这在 JSX 中很容易实现:
{isOpen && (
<StyledDiv> ... </StyledDiv>
)}
如果可能,我需要解决方案来更改样式化组件本身中的 Tailwind 类。我不确定这是否可能,因为状态不是道具,而且我知道样式化组件是无状态的。我是 SC 的新手,所以也许我缺少一个简单的解决方案。
解决方案
推荐阅读
- java - 如何使用 Vavr 在 Java 中对具有定义类型的 Option 元组进行模式匹配
- django - 返回 Django 视图集中由另一列分组的一列的值列表
- arrays - range 方法 getValues() 返回和 setValues() 接受什么?
- python - 如何根据您在另一个条目小部件中键入的内容填充一个条目小部件
- reactjs - 如何在 reactjs 中创建自定义中间件来更新减速器?
- go - 使用默认凭据对 Gmail API 进行身份验证
- .net - WPF 是否提供任何内置的图表控件?
- spring-integration - 使用 Spring Integration SQS 在多个队列上聚合未来/响应 SQS Acks/Error
- swagger-editor - Swagger Editor 如何为每个标签设置一个 basePath?
- c# - 如何设置 Ray Casted 变换的父级?