Передача стиля из состояния компонента в ReactJS

У меня есть следующий компонент:

import React from "react";
import { connect } from "react-redux";

class Filter extends React.Component {
  state = {
    value: ''
  };

  handleChange = (e) => {
    let value = e.target.value;
    if(value){
      document.getElementById("clear").style["display"] = "none";
      document.getElementById("fetch").style["display"] = "none";

    } else {
      document.getElementById("clear").style["display"] = "inline-block";
      document.getElementById("fetch").style["display"] = "inline-block";
    }
    this.setState({ value });
    this.props.handleFilter({ value });
  }

  render(){
  let content = this.props.items > 0 ? (
      <div
        className="filter"
        >
        <input
          id="search-input"
          type="text"
          placeholder="Search..."
          value={this.state.value}
          onChange={this.handleChange}
        />
      </div>
    ) : <div></div>
    return content;
  }
}

const mapStateToProps = (state,props) => ({
  items: state.settings.length
});

module.exports = connect(mapStateToProps, null)(Filter);

Есть ли способ, которым я могу более изящно передать реквизиты для очистки и получения компонентов? Я пытаюсь стилизовать их, основываясь на взаимодействиях с моим поисковым входом (в основном, я хотел бы иметь возможность стилизовать их, когда мое значение поиска равно ""). Как я могу отправить стили как опору, основанную на состоянии моего текущего компонента?

2 ответа

Пожалуйста, отреагируйте, что это именно то, что вы ищете: пожалуйста, найдите образец ниже:

import React, {
  Component
} from 'react'
import injectSheet from 'react-jss'
import classNames from 'classnames'


class someComponent extends Component {
  handleClose = () => {}

  render() {
    const {
      classes,
    } = this.props

    return ( <
      div className = {
        classes.resize
      } >
      <
      /div>
    )
  }
}


const styles = {
  container: {
    width: '100%',
    height: '100rem'
    borderBottom: '10px'
  }
}

export default injectSheet(styles)(someComponent)

Если вы используете библиотеку с именем styled-components, вы можете легко сделать это, как в этом примере: https://www.styled-components.com/docs/basics. Идея с этой библиотекой заключается в том, что вы оборачиваете свои основные компоненты HTML, как <input> в <Input>затем используйте новый <Input> компонент в вашем методе render(). Новый компонент будет контролироваться путем передачи значений из вашего состояния в качестве реквизита.

Другие вопросы по тегам