Измените цвет заполнителя TextInput с помощью Styled Components в React Native

Как вы устанавливаете цвет TextInput его заполнитель с Стилизованные компоненты в Реагировать на родной?

Я пробовал следующее без везения:

1.

const Input = styled.TextInput`
   border: 1px solid green;
   display: block;
   margin: 0 0 1em;

   ::placeholder {
       color: green;
   }
`

2.

const Input = styled.TextInput`
   border: 1px solid green;
   display: block;
   margin: 0 0 1em;

   &::placeholder {
       color: green;
   }
`
Умерло ли Create-React-App?
Умерло ли Create-React-App?
В этом документальном фильме React.dev мы исследуем, мертв ли Create React App (CRA) и какое будущее ждет этот популярный фреймворк React.
Освоение React Native: Пошаговое руководство для начинающих
Освоение React Native: Пошаговое руководство для начинающих
React Native - это популярный фреймворк с открытым исходным кодом, используемый для разработки мобильных приложений. Он был разработан компанией...
В чем разница между react native и react ?
В чем разница между react native и react ?
React и React Native - два популярных фреймворка для создания пользовательских интерфейсов, но они предназначены для разных платформ. React - это...
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
От React к React Native: Руководство для начинающих по разработке мобильных приложений с использованием React
Если вы уже умеете работать с React, создание мобильных приложений для iOS и Android - это новое приключение, в котором вы сможете применить свои...
Хуки React: что это такое и как их использовать
Хуки React: что это такое и как их использовать
Хуки React - это мощная функция библиотеки React, которая позволяет разработчикам использовать состояние и другие возможности React без написания...
5
0
16 570
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Чтобы изменить пользовательское свойство цвета текста заполнителя textinputs "заполнительтекстового цвета" например

<TextInput
        style = {{height: 40, borderColor: 'gray', borderWidth: 1}}
        onChangeText = {(text) => this.setState({text})}
        placeholder = 'Enter text'
        placeholderTextColor = 'red'
        value = {this.state.text}
      />

Вы не можете напрямую стилизовать цвет заполнителя с помощью styled-components, но вы можете передать свойство placeholderTextColor в ваш стилизованный Textinput.

Пример:

const Input = styled.TextInput`
   border: 1px solid green;
   display: block;
   margin: 0 0 1em;

`

а затем внутри вашей функции рендеринга:

<Input placeholder = "hello" placeholderTextColor = "green" />

Выход:

output

Рабочий пример:

https://snack.expo.io/rybp-nKaE

Хорошо спасибо. Конечно, это не то, на что я надеялся. Как узнать, какие свойства возможны, а какие нет? Это где-то задокументировано?

Wannes 28.05.2019 11:58

@Wannes На самом деле это не задокументировано, но все, что связано с конкретными браузерами, не поддерживается. Как например ::placeholder и так далее

Tim 28.05.2019 11:59
Ответ принят как подходящий

Лучший способ сделать это:

export const Input = styled.TextInput.attrs({
  placeholderTextColor: "red"
})`
  background-color: "#000";
`;

Это работает для меня, но я не могу получить доступ к объекту theme, чтобы получить цвета. жестко закодированные значения работают нормально.

Haseeb Burki 23.03.2021 20:21

@HaseebBurki попробуй color: ${themeColor};

mtshv 12.08.2021 19:03

можешь попробовать:

export const NewTodo = styled.input`
  padding: 16px 16px 16px 60px;
  font-weight: 300;
  font-size: 15px;
  ::placeholder,
  ::-webkit-input-placeholder {
    color: red;
  }
  :-ms-input-placeholder {
     color: red;
  }
`;

Как оформить заполнитель ввода с помощью Styled Components?

В дополнение к ответу @Fernando Pascoal Gomes, если вы хотите получить доступ к объекту theme, рассмотрите возможность передачи функции .attrs(), которая возвращает объект, который компонент наследует для своих реквизитов.

В вашем случае TextInput принимает реквизит placeholderTextColor, поэтому это может выглядеть так:

const Input = styled.TextInput.attrs((props) => ({
  placeholderTextColor: props.theme.palette.placeholderColor,
}))`
  background-color: #fff;
  color: #000;
  ...
`

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