React Native Picker Select:如何自动选择一个项目但仍然能够选择其他项目?

Posted

技术标签:

【中文标题】React Native Picker Select:如何自动选择一个项目但仍然能够选择其他项目?【英文标题】:React Native Picker Select: How to auto-select an item but still be able to select others? 【发布时间】:2020-06-24 14:07:04 【问题描述】:

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

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

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

我应该如何处理这个问题?

【问题讨论】:

【参考方案1】:

首先制作一个组件状态

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')
         />
      )
   

【讨论】:

这就是诀窍!我希望能够在不带状态的情况下做到这一点,但我认为这是最有效的方式。【参考方案2】:

这对我有用:

使用选项overflow: 'hidden'

将属性“pickerProps”添加到RNPickerSelect
<RNPickerSelect style=styles.selectContainer
                ...
                pickerProps= style:  height: 214, overflow: 'hidden'  
                ...
            />

【讨论】:

【参考方案3】:

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

<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)
/>

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

【讨论】:

【参考方案4】:

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

在下面的示例中,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>
  )

【讨论】:

以上是关于React Native Picker Select:如何自动选择一个项目但仍然能够选择其他项目?的主要内容,如果未能解决你的问题,请参考以下文章

我的 react-native 应用程序无法识别 react-native-image-crop-picker

使用 React-native-picker-select 无头组件

选择器'labelColor'没有已知的类方法 - react-native-image-crop-picker - 用于 react-native iOS

react-native-image-picker 视频的持续时间

react-native-image-picker 获得反向高度和宽度

安装 react-native-image-crop-picker 后构建失败