Как заставить palceholder перемещаться вправо от опций после выбора значений в пакете react select?

#reactjs

#reactjs

Вопрос:

Я использую пакет ‘react-select’ для создания выпадающего списка с несколькими вариантами выбора и добавления реквизитов в соответствии с моими требованиями. Но я хочу еще одного: я делаю так, чтобы заполнитель перемещался вправо от параметров после выбора значений из выпадающего списка.

введите описание изображения здесь

Как и на изображении, выбран один параметр, а заполнитель все еще отображается. Я хочу что-то вроде этого, чтобы при выборе заполнителя значений он смещался вправо от параметров.Вот как я использую.

 <Select
            placeholder='Type Team Name...'
            value={getOptions(value)}
            options={getOptions(data)}
            onChange={(data) => setValue(data || [])}
            styles={selectStyles}
            isMulti
            isClearable
            isSearchable
        />
    ```
    
  

Комментарии:

1. вы хотите, чтобы заполнитель оставался на своем месте или перемещался вправо от параметров

2. перемещение вправо от параметров при их выборе.

3. мне трудно анализировать, можете ли вы воссоздать это в онлайн-среде разработки, такой как codesandbox, и сбросить мне ссылку

4. codesandbox.io/s/keen-black-jfpor?file=/example.js Я отредактировал этот пример, который я где-то нашел. Заполнитель исчезает при выборе значений, но я хочу, чтобы этот заполнитель смещался вправо от выбранных параметров.

5. я получил решение и поделился рабочим кодом

Ответ №1:

Основной файл Javascript :

 import React from "react";
import "./example.css"

import Select from "react-select";
import { colourOptions } from "./data";
setTimeout(async ()=>{
    const reqinput= await document.getElementById("react-select-2-input");
    if(reqinput){
        reqinput.placeholder = "slect colors....";
        reqinput.style.width="550px"
    }else{
        console.log("thu")
    }
},200)

const Example=()=>{
    return(
        <Select
        defaultValue=""
        placeholder="select colors..."
        isMulti
        name="colors"
        options={colourOptions}
        className="basic-multi-select"
        classNamePrefix="select"
      />
    )
}

export default Example
  

пример.css-файл:

 .css-1wa3eu0-placeholder{
    display: none;
}
  

Я добавил css, потому что, когда ввод был очищен, нежелательное div появлялось снова, поэтому мне пришлось скрыть div сквозной css

Это работа, которую я протестировал в своей локальной системе.

Если это не работает, пожалуйста, не волнуйтесь, это только из-за изменения имен классов и идентификаторов, просто проверьте их и замените классы и идентификаторы, если требуется, как я сделал это со ссылкой на ваш пример codesandbox

Редактировать :

Результатом вышеупомянутого кода является:

Результат

Комментарии:

1. Как это отвечает на вопрос? Он просто неловко скрывает заполнитель (один раз) через 200 мс. Также он полностью работает вне react, что делает невозможным его повторное использование.

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

3. Что это за «это», которое должно работать? Как заполнитель остается видимым после добавления значения?

4. Я понимаю, что вы делаете. Я просто думаю, что это не так, как следует использовать при использовании react. По сути, вы взламываете детали реализации сторонней библиотеки. Если когда-либо эта библиотека изменит способ отображения выбора, она перестанет работать. Кроме того, учитывая, как есть, его нельзя повторно использовать. Если бы я должен был визуализировать <Example/> дважды, это не удалось. Тогда все асинхронные / ожидающие части setTimeout вообще не имеют смысла. Извините, если это звучит резко, но я не думаю, что это хороший ответ на вопрос.

5. Учитывая реализацию компонента react-select Select, я не думаю, что есть разумный способ заставить это работать. Это просто недостающая функция компонента. Хотя его перенос и реагирование на изменения значений могут быть отправной точкой. Что касается вашего setTimeout вопроса. В вашем коде тайм-аут гарантирует, что у react было время для рендеринга элемента, прежде чем вы попытаетесь получить к нему доступ через dom api.