Добавьте значок перед элементом ввода в response-select

Я пытаюсь добавить значок перед элементом ввода для выбора реакции. Я могу поместить значок в заполнитель, но проблема с заполнителем заключается в том, что, когда я выбираю некоторые данные из раскрывающегося списка, значок заполнителя удаляется. Мне нужна помощь, чтобы получить значок перед оператором Select.

Вот код того, чего я достиг до сих пор

import React, { Component } from 'react'
import Select, { components } from 'react-select'

export default class InfluencersForm extends Component {

    constructor(){
        super();
        this.handleInfluencerName = this.handleInfluencerName.bind(this);
    }
    handleInfluencerName(event){
        console.info(event)
    }
    render() {
        const influencers = [
            { value: 'abc', label: 'abc' },
            { value: 'def', label: 'def' }
        ]

        const DropdownIndicator = (props) => {
            return components.DropdownIndicator && (
                <components.DropdownIndicator {...props}>
                    <i className = "fa fa-search" aria-hidden = "true" style = {{ position: 'initial' }}></i>
                </components.DropdownIndicator>
            );
        };
        return (
            <div>
                <div>
                    <Select
                        options = {influencers}
                        isMulti = {false}
                        onChange = {this.handleInfluencerName}
                        isSearchable = {true}
                        components = {{ DropdownIndicator }}
                        placeholder = {placeholderComponent}
                        classNamePrefix = "vyrill"/>
                </div>
            </div>
        )
    }
}

const placeholderComponent = (
    <div>
        <i className = "fa fa-search" aria-hidden = "true" style = {{ position: 'initial' }}></i>
        I am placeholder
    </div>
);

Вам необходимо предоставить код

robinsax 26.12.2018 08:45

@robinsax ответ обновляется кодом.

Aniruddh Agarwal 26.12.2018 08:57

Я не уверен, чего вы пытаетесь достичь, но, возможно, вам нужно использовать стиль :before для этого?

Mikkel 26.12.2018 09:00

но я искал что-то, в чем я мог бы использовать свои готовые классы case, такие как классы font awesome или что-то в этом роде.

Aniruddh Agarwal 26.12.2018 09:05

Вместо этого вы можете добавить новый div со значком слева, заполнитель будет скрыт, когда у вас будет значение.

Just code 26.12.2018 09:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
8
5
13 451
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Основываясь на том, что вы уже сделали, я бы сделал комбинацию нестандартного стиля + нестандартный компонент.

export default class InfluencersForm extends Component {
  constructor() {
    super();
    this.handleInfluencerName = this.handleInfluencerName.bind(this);
  }
  handleInfluencerName(event) {
    console.info(event);
  }
  render() {
    const influencers = [
      { value: "abc", label: "abc" },
      { value: "def", label: "def" }
    ];

    const ValueContainer = ({ children, ...props }) => {
      return (
        components.ValueContainer && (
          <components.ValueContainer {...props}>
            {!!children && (
              <i
                className = "fa fa-search"
                aria-hidden = "true"
                style = {{ position: 'absolute', left: 6 }}
              />
            )}
            {children}
          </components.ValueContainer>
        )
      );
    };

    const DropdownIndicator = props => {
      return (
        components.DropdownIndicator && (
          <components.DropdownIndicator {...props}>
            <i
              className = "fa fa-search"
              aria-hidden = "true"
            />
          </components.DropdownIndicator>
        )
      );
    };

    const styles = {
      valueContainer: base => ({
        ...base,
        paddingLeft: 24
      })
    }

    return (
      <div>
        <div>
          <Select
            options = {influencers}
            isMulti = {false}
            onChange = {this.handleInfluencerName}
            isSearchable = {true}
            components = {{ DropdownIndicator, ValueContainer }}
            classNamePrefix = "vyrill"
            styles = {styles}
          />
        </div>
      </div>
    );
  }
}

В моем собственном стиле я добавил произвольный paddingLeft или 24, чтобы освободить место и добавить желаемый значок. Возможно, вам придется изменить его в зависимости от значка, который вы хотите использовать.

Затем в ValueContainer рядом с children я поставил значок fontAwesome.

Вот живой пример моего решения.

Живой пример не работает. Если я выберу «abc», «abc» перекрывается с увеличительным стеклом.

Melissa 20.02.2019 20:35

@Melissa живой пример был не в актуальном состоянии, теперь он

Laura 20.02.2019 20:45

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