我是新來的反應本地人。任何人都可以建議我如何實現多個選擇下拉反應原生。我嘗試了來自react-native-multiple-select的MultiSelect(https://github.com/toystars/react-native-multiple-select),但它不起作用。在多選擇下拉反應本土
回答
我已經實現作出反應機組件。 附帶源代碼。 它顯示如何使列表可選。 它可能是您的解決方案的基礎。 請參閱。
import React from 'react';
import {View, Text, StyleSheet, FlatList, TouchableHighlight} from 'react-native';
var thisObj;
export default class MultiSelect extends React.Component {
constructor(props) {
super(props);
this.state = {
selectedItems: {}
};
}
onItemPressed(item) {
var oldSelectedItems = this.state.selectedItems;
var itemState = oldSelectedItems[item.key];
if(!itemState) {
oldSelectedItems[item.key] = true;
}
else {
var newState = itemState? false: true;
oldSelectedItems[item.key] = newState;
}
this.setState({
selectedItems: oldSelectedItems,
});
}
componentDidMount() {
thisObj = this;
}
getStyle(item) {
try {
console.log(thisObj.state.selectedItems[item.key]);
return thisObj.state.selectedItems[item.key]? styles.itemTextSelected : styles.itemText;
} catch(e) {
return styles.itemText;
}
}
render() {
return (
<View style={styles.rootView}>
<FlatList style={styles.list}
extraData={this.state}
data={this.props.data}
renderItem={({item}) =>
<TouchableHighlight onPress={this.onItemPressed.bind(this, item)} underlayColor='#f00'>
<Text style={this.getStyle(item)}>{item.key}</Text>
</TouchableHighlight>
}
/>
</View>
);
}
}
const styles = StyleSheet.create({
rootView : {
},
itemText: {
padding: 16,
color: "#fff"
},
itemTextSelected: {
padding: 16,
color: "#fff",
backgroundColor: '#f00'
},
list: {
}
});
如何使用本
<Multiselect data = { [{"key" : "item1"}, {"key" : "item2"}{"key" : "item3"}]
}\>
感謝@Dmytro馬爾丘克,我已經試過你的代碼,但不能生產結果。如果您能提出其他選擇,我會非常高興。 –
你有其他選擇嗎? @Dmytrom –
我已經實現了多選平面列表,但沒有下拉菜單。你需要源代碼嗎? –
這是實現多選源列表的源代碼
import React from 'react';
import {View, Text, StyleSheet, FlatList, TouchableHighlight, Dimensions} from 'react-native';
var thisObj;
var deviceHeight = Dimensions.get("window").height;
class MyListItem extends React.PureComponent {
render() {
return (
<View style={{flex: 1}}>
<TouchableHighlight onPress={this.props.onPress.bind(this)} underlayColor='#616161'>
<Text style={this.props.style}>{this.props.item.key}</Text>
</TouchableHighlight>
</View>
);
}
}
export default class MultiSelect extends React.Component {
constructor(props) {
super(props);
var selectedItemsObj = {};
if(this.props.selectedItems) {
var items = this.props.selectedItems.split(',');
items.forEach(function(item) {
selectedItemsObj[item] = true;
});
}
this.state = {
selectedItems: selectedItemsObj
};
}
onItemPressed(item) {
var oldSelectedItems = this.state.selectedItems;
var itemState = oldSelectedItems[item.key];
if(!itemState) {
oldSelectedItems[item.key] = true;
}
else {
var newState = itemState? false: true;
oldSelectedItems[item.key] = newState;
}
this.setState({
selectedItems: oldSelectedItems,
});
var arrayOfSelectedItems = [];
var joinedItems = Object.keys(oldSelectedItems);
joinedItems.forEach(function(key) {
if(oldSelectedItems[key])
arrayOfSelectedItems.push(key);
});
var selectedItem = null;
if(arrayOfSelectedItems.length > 0)
selectedItem = arrayOfSelectedItems.join();
this.props.onValueChange(selectedItem);
}
componentWillMount() {
thisObj = this;
}
getStyle(item) {
try {
console.log(thisObj.state.selectedItems[item.key]);
return thisObj.state.selectedItems[item.key]? styles.itemTextSelected : styles.itemText;
} catch(e) {
return styles.itemText;
}
}
_renderItem = ({item}) => {
return (<MyListItem style={this.getStyle(item)} onPress={this.onItemPressed.bind(this, item)} item={item} />);
}
render() {
return (
<View style={styles.rootView}>
<FlatList style={styles.list}
initialNumToRender={10}
extraData={this.state}
data={this.props.data}
renderItem={this._renderItem.bind(this)}
/>
</View>
);
}
}
const styles = StyleSheet.create({
rootView : {
height: deviceHeight/2
},
itemText: {
padding: 8,
color: "#fff"
},
itemTextSelected: {
padding: 8,
color: "#fff",
backgroundColor: '#757575'
},
list: {
flex: 1,
}
});
這是怎樣的組件時,應使用
this.state = {
selectedItem : null,
data: [{key:"key1", label:"label1"}, {key:"key2", label:"label2"}]
}
...
<MultiSelect
data={this.state.data}
selectedItems={this.state.selectedItem}
onValueChange={ (itemValue) => thisObj.setState({selectedItem: itemValue})}/>
選定的值將被連接在this.state.selectedItem場
要從API中獲取的要在下拉菜單中顯示的項目列表爲JSON格式。如何轉換到該格式[{鍵: 「KEY1」,標籤: 「LABEL1」},{關鍵: 「KEY2」,標籤: 「LABEL2」}] –
你應該做這樣的事情 VAR resultsArray = [] ; 取(URL) \t \t。然後((響應)=> response.json()) \t \t。然後((responseJson)=> { \t \t \t \t responseJson.forEach(函數(項目){ \t \t \t \t \t resultArray.push({ \t \t \t \t \t \t鍵:item.somekey, \t \t \t \t \t \t標籤:item.someLabel \t \t \t \t \t}); \t \t \t \t}); \t \t \t \t this.setState({ 數據:resultsArray, 的ShowModal:真 }) \t \t}) \t \t}) –
- 1. 下拉多選項選擇
- 2. 通道具反應本土
- 3. 導航回反應本土
- 4. asp.net jqGrid下拉多選擇
- 5. PHP下拉多選擇
- 6. 多個選擇與下拉
- 7. 有多個選擇下拉
- 8. 選擇從多個下拉
- 9. 格式化反應選擇下拉選項
- 10. 獲取GPS精度在反應本土
- 11. UI的選擇如何從文本中多選擇下拉
- 12. 如何自定義Android的選擇器按鈕,在反應本土
- 13. 選擇在多組下拉jquery的
- 14. 反應語義UI - 多選複選框下拉
- 15. 角度選擇多選下拉
- 16. 下拉選擇
- 17. wxToolBar與下拉菜單:上選擇的項目沒有反應
- 18. 反應本土屈曲方向
- 19. 上設置狀態反應本土
- 20. 反應本土不承認項目
- 21. 訪問共享偏好反應本土
- 22. 出口常數變量反應本土
- 23. 重裝物理設備 - 反應本土
- 24. 反應本土頭題位置
- 25. 重定向屏幕反應本土
- 26. 本土作出反應,呼籲職能
- 27. 廣場右上角反應本土
- 28. 文字陰影反應本土
- 29. 安裝的NodeJS來回反應本土
- 30. 反應原生ListView多選項選擇
可否請你分享你的代碼段設置? – wlisrausr
我有這個環節上做https://stackoverflow.com/questions/46646491/multiselect-in-react-native –
@wlisrausr請經過上述評論 –