#reactjs #react-native
#reactjs #react-native
Вопрос:
У меня есть компонент для выпадающего списка (имя: JDrop) :
import React, { Component } from 'react';
import { View,Picker,Image } from 'react-native';
export default class JDrop extends Component {
constructor(props,state) {
super(props)
this.state = {
selectedValue:'',
}
}
render() {
const {items,sizeW,bColor} = this.props;
return (
<View style={{flexDirection: 'row',height: 35, width: sizeW, alignItems: 'center',backgroundColor:bColor}}>
<View>
<Image style={{width:20,height:10, margin:5}} source={require('../../assets/Images/arrowb.png')}/>
</View>
<View >
<Picker
mode='dropdown'
style={{height: 35, width: sizeW,backgroundColor:bColor}}
selectedValue={this.state.selectedValue}
onValueChange={(itemValue, itemIndex) => this.setState({selectedValue: itemValue})}
prompt='Select...'
>
{
items.map( (item,ind) => (
<Picker.Item label={item.name} value={item.value} key={ind} />
))
}
</Picker>
</View>
</View>
)
}
}
Я использую его в App.js как :
<JDrop items={this.state.priority} sizeW={200} bColor={'blue'} ></JDrop>
как я могу получить выбранное значение из JDrop в App.js ?
Комментарии:
1. у вас опубликован только один компонент
JDrop
. Итак, что вы подразумеваете подcomponent B
иcomponent A
?2. означает доступ к sth из JDrop в App.js
3. Я думаю, что способ реагирования заключался бы в создании метода в App.js и передает его свойству, которое вы вызываете в своем компоненте JDrop при его изменении:
<JDrop items={this.state.priority} onChange={this.itemChanged.bind(this)}>
(или аналогичном). Возможно, вы могли бы также передать объект свойству и изменить значение для этого объекта, но на самом деле это не способ react.
Ответ №1:
Есть несколько способов, но самый простой — передать обработчик изменений от родительского элемента дочернему элементу, который может передавать изменения в дочернем элементе. Вот так:
class App extends React.Component {
onChangeJDrop = (val) => {
console.log(val)
}
render() {
return (
<JDrop onChange={this.onChangeJDrop} items={this.state.priority} sizeW={200} bColor={'blue'} ></JDrop>
)
}
}
class JDrop extends React.Component {
onValueChange = (itemValue, itemIndex) => {
this.setState({selectedValue: itemValue})
this.props.onChange(itemValue)
}
render() {
return (
<Picker onValueChange={this.onValueChange} />
)
}
}
Ответ №2:
Вам нужно будет передать обратный вызов в ваш компонент JDrop (названный onSelect ниже):
<JDrop onSelect={this.onSelect} items={this.state.priority} sizeW={200} bColor={'blue'} ></JDrop>
Затем в вашем компоненте JDrop:
onValueChange={(itemValue, itemIndex) => {
this.setState({selectedValue: itemValue})
this.props.onSelect(itemValue)
} }