代码之家  ›  专栏  ›  技术社区  ›  Harrison Cramer

在reactjs中从组件状态传递样式

  •  0
  • Harrison Cramer  · 技术社区  · 5 年前

    我有以下组件:

    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);
    

    有没有一种方法可以更优雅地将道具传递给clear和fetch组件?我试图根据与搜索输入的交互来设置它们的样式(基本上,我希望在搜索值为“”时能够设置它们的样式)。 如何根据当前组件的状态发送样式作为道具?

    2 回复  |  直到 5 年前
        1
  •  0
  •   Arulmozhi Manikandan    5 年前

    请回复jss,这正是您正在搜索的内容:请查找以下示例:

    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)
        2
  •  0
  •   Max K    5 年前

    如果使用名为“样式化组件”的库,可以像在本例中一样轻松地执行此操作: https://www.styled-components.com/docs/basics#passed-props . 这个库的思想是包装基本的html组件,比如 <input> <Input> ,然后使用新的 <输入> Render()方法中的组件。新组件将通过将值作为道具从您的状态传递来控制。