如何在 Styled Components 中根据状态设置组件样式?

How to style a component based on state in Styled Components?

我正在尝试根据 React 中的 Styled Components 中的 useState 挂钩更改输入背景。

这是我的代码:

 const [searchActive, setSearchActive] = useState(true);
 <div className="search" searchActive={searchActive}>
     <input id="input"/> 
 </div>

这是我的样式化组件代码:

.search {
    background: ${(searchActive) => (searchActive ? "red" : "yellow")};
   }

如有任何建议,我们将不胜感激。

像这样在样式组件中添加'props';

.search {
  background: ${props => props.searchActive? "red" : "yellow"};
}

您可以在jsx中声明并直接使用Styled Components。它们不需要用作类名。也许这个方法对你有用。

import React, { useState } from "react";
import styled from "styled-components";

export default function App() {
  const [searchActive, setSearchActive] = useState(true);
  const [value, setValue] = useState("");
  const Search = styled.input`
     background: ${(props) => (props.searchActive ? "red" : "yellow")};
  `;
  return (
    <Search
      searchActive={searchActive}
      value={value}
      onChange={(e) => {
        setValue(e.target.value);
        setSearchActive(false);
      }}
    />
  );
}

创建组件并传入 props 将起作用:

import React from 'react'
import styled from 'styled-components'

const Search = styled.div`
  background: ${props => (props.searchActive ? 'red' : `yellow`)};
`

const Parent = () => {
  return (
      <Search searchActive={searchActive}>
        <input id="input" /> 
      </Search>
  )
}

export default Parent

唯一不同的是,您对 search 的任何风格都可以添加到 Search 组件中,但您没有显示任何进一步的代码,所以我不知道您是如何引入它的.

您还可以使用以下方式将组件外部化:

import styled from 'styled-components'

export const Search = styled.div`
  background: ${props => (props.searchActive ? 'red' : `yellow`)};
`

然后把它带进来:

import {Search} from './search.js'