首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据状态更改样式化组件

如何根据状态更改样式化组件
EN

Stack Overflow用户
提问于 2020-12-16 23:44:57
回答 1查看 103关注 0票数 0

我正在使用样式化组件来样式化我的react应用程序。我想根据我选择的内容更改文本颜色。我已经尝试传递状态,但我没有看到我的更改被使用。只能使用道具更新吗?我环顾了一下文档,但变得更加困惑。我决定发布整个组件。抱歉,如果你不应该这样做。

代码语言:javascript
复制
import React, {useState} from 'react'

import { pulse, flash} from 'react-animations'
import styled, { keyframes } from 'styled-components';
import Scan from './Components/Scan'
import Broke from './Components/Broke/Broke'
import Return from './Components/Return/Return'
import Forgot from './Components/Forgot/Forgot'
import { Button } from 'reactstrap';




const StartText =  styled.h1`
  font-size: 3em;


`
const Wrapper = styled.div `
  display: flex;
  justify-content: center;
`

const BrokeReason = styled.div `
  margin-top: 15px;

  margin-right: 5px;
  margin-left: 3px;
  border: solid #292b2c 2px;
  border-radius: 3px;
  background-color: #0275d8;
  font-size: 1.5em;
  padding: 5px;
  cursor: pointer;
  color: ${reason => reason.broke ? 'white' : 'red'}


`
const TotalWrap = styled.div `


`
const HeaderContainer = styled.div `
  display: flex;
  justify-content: center;
 
`
function App() {

const [reason, setReason] = useState({
    broke: false,
    forgot: false,
    return: false
})

const click = (event) => {
 
  if(event.currentTarget.textContent === 'I Broke My Chromebook'){

      setReason({...reason, broke: !reason.broke })
  } else if (event.currentTarget.textContent === 'I am returning my chromebook') {
    setReason({...reason, return: !reason.return })
  }else {
    setReason({...reason, forgot: !reason.forgot })
  }


}

  return (
    <TotalWrap>
    
      <HeaderContainer>
      <h1>Select your problem</h1>
      </HeaderContainer>
    <Wrapper>
    <BrokeReason onClick={click}>I Broke My Chromebook</BrokeReason>
    <BrokeReason onClick={click}>I am returning my chromebook</BrokeReason>
    <BrokeReason onClick={click}>I Forgot my chromebook</BrokeReason>
    </Wrapper>
    {/* <Scan /> */}
    {reason.broke ? <Broke  style={{backgroundColor: 'red'}}    /> : null || reason.return ? <Return /> : null || reason.forgot ? <Forgot /> : null}
  

    </TotalWrap>
  );
}

export default App;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-16 23:58:31

样式化组件使用字符串插值(模板、文字)和函数,该函数将组件的属性作为第一个参数。所以,你可以这样做,

代码语言:javascript
复制
const BrokeReason = styled.div `
  margin-top: 15px;
  margin-right: 5px;
  margin-left: 3px;
  border: solid #292b2c 2px;
  border-radius: 3px;
  background-color: #0275d8;
  font-size: 1.5em;
  padding: 5px;
  cursor: pointer;
  color: ${props => props.broke ? 'white' : 'red'}
`

然后将broke值传递给属性,

代码语言:javascript
复制
<BrokeReason broke={reason.broke}>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65326564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档