3

RNPickerSelect在我的 React Native 应用程序中使用。我想要三个选项:A BC。我想A默认被选中(就像USA在国家选择器列表中默认选择的频率一样)。这是我尝试过的:

<RNPickerSelect
  value={{label: 'A', value: 'A'}}
    items={[
      { label: 'A', value: 'A' },
      { label: 'B', value: 'B' },
      { label: 'C', value: 'C' },
    ]}
  onValueChange={value => {}}
/>

默认情况下确实会选择A,但问题是它不允许您在之后选择任何其他人。

我应该如何处理这个?

4

4 回答 4

6

首先使组件状态像

class DropDown extends Component {
   constructor() {
      this.state = {
          dropdownValue: 'A'
      }
   }
   
   handleDropdownChange = (name) => (value) => {
      this.setState({ [name]: value })
   }
   
   render() {
      const { dropdownValue } = this.state  

      return (
         <RNPickerSelect
            value={dropdownValue}
            items={[
              { label: 'A', value: 'A' },
              { label: 'B', value: 'B' },
              { label: 'C', value: 'C' },
            ]}
            onValueChange={this.handleDropdownChange('dropdownValue')}
         />
      )
   }
}
于 2020-06-24T14:21:00.607 回答
0

这对我有用:

使用选项溢出将属性“pickerProps”添加到 RNPickerSelect :'hidden'

<RNPickerSelect style={styles.selectContainer}
                ...
                pickerProps={{ style: { height: 214, overflow: 'hidden' } }}
                ...
            />
于 2021-04-19T18:02:15.863 回答
0

如果您希望选择器显示选择的第一个项目。您可以简单地将空对象传递给占位符。参考这个文档

<RNPickerSelect
placeholder={{}}
items={[
  { label: 'A', value: 'A' },
  { label: 'B', value: 'B' },
  { label: 'C', value: 'C' },
]}
onValueChange={value => {}}

/>

同时你可以有一个状态变量,它选择了第一个项目,你在 onValueChange 中使用它

例如:

const [selected, setSelected] = useState('A');

<RNPickerSelect 
placeholder={{}}
items={[
{ label: 'A', value: 'A' },
{ label: 'B', value: 'B' },
{ label: 'C', value: 'C' },
]}
 onValueChange={value => setSelected(value)}
/>

注意:您将无法添加任何占位符。您可以在组件上方添加标签:)

于 2021-11-10T10:16:53.963 回答
0

只是想分享在设置我的选择器组件并遇到相同问题时对我有用的方法。

在下面的示例中,useEffect将初始选择器值设置为第二个选项。

export default function ContactPicker({ contacts, contact, setContact, setNewState }) {

  useEffect(() => {
    contacts?.length > 1 && setContact(contacts[1]['id'])
  }, [contacts])

  return (
    <View>
      <Picker
        selectedValue={contact}
        onValueChange={(itemValue, itemPosition) => {
          setContact(itemValue)
          setNewState(prev => ({ ...prev, contact_id: itemValue }))
        }}
      >
        {contacts?.map((contact, index) => (
          <Picker.Item
            key={index}
            label={contact.name}
            value={contact.id}
          />
        ))}
      </Picker>
    </View>
  )
}
于 2021-12-30T06:03:36.883 回答