0

dropDown嗨,我想创建一个react每个项目都有一个图标。正如我所尝试的,react-select但它没有显示icon,以及选定的值。当我value prop从显示react-select component中删除时label。我想像这样创建下拉列表。 我想像这样创建下拉菜单

//用户信息.js

import React from "react";
import { connect } from "react-redux";
import FontAwesome from "react-fontawesome";
import Select from "react-select";

import { setPresence } from "../../ducks/user";

import "./UserInfo.css";

class UserInfo extends React.Component {
  //   constructor(props) {
  //     super(props);
  //     this.state = {
  //       currentPresence: "available",
  //     };
  //   }

  presenceOpts = [
    { value: "available", label: "Available" },
    { value: "dnd", label: "Busy" },
    { value: "away", label: "Away" },
  ];

  setPresenceFun(presence) {
    this.props.setPresence(presence);
  }

  renderPresenceOption(option) {
    return (
      <div className="presenceOption">
        <FontAwesome name="circle" className={"presenceIcon " + option.value} />
        {option.label}
      </div>
    );
  }

  renderPresenceValue(presence) {
    return (
      <div className="currentPresence">
        <FontAwesome
          name="circle"
          className={"presenceIcon " + presence.value}
        />
      </div>
    );
  }

  render() {
    return (
      <div className="UserInfo">
        {this.props.client.authenticated && (
          <div className="authenticated">
            <div className="user">
              <div className="presenceControl">
                <Select
                  name="presence"
                  value={this.props.user.presence.value}
                  options={this.presenceOpts}
                  onChange={this.setPresenceFun.bind(this)}
                  clearable={false}
                  optionRenderer={this.renderPresenceOption}
                  valueRenderer={this.renderPresenceValue}
                />
              </div>

              <div className="username">
                <p>{this.props.client.jid.local}</p>
              </div>
            </div>
          </div>
        )}
      </div>
    );
  }
}

const mapStateToProps = (state, props) => ({
  client: state.client,
  user: state.user,
});

const mapDispatchToProps = (dispatch, props) => {
  return {
    setPresence: (presence) => dispatch(setPresence(presence)),
  };
};

export default connect(mapStateToProps, mapDispatchToProps)(UserInfo);
4

1 回答 1

0

您可以自定义下拉选项

这可以帮助您解决使用 react select 的自定义样式问题。

https://codesandbox.io/s/react-select-add-custom-option-forked-u1iee?file=/src/index.js

于 2021-09-28T11:55:12.500 回答