反応ネイティブプロジェクトでは、ユーザーがブランチでスタッフをフィルタリングできるピッカーを使用しています。データベースからラベルの名前と値を取得しました。 ブランチIDをピッカー値から取得して、譜表をフィルタリングできるようになりましたこのリンクを持つブランチhttp://192.168.10.60:8888/customerfeedback/public/api/staff?pId=.
私の問題は、state値を更新して、表示idの代わりに、選択したブランチをユーザーに表示したいことです。 ピッカーラベル名を取得して自分の状態に更新するにはどうすればよいですか?
これが私のコードです:
<PickerIOS
style={{ flex: 1 }}
selectedValue={this.state.pickerSelected}
onValueChange={(value, index) => this.onPickerValueChange(value, index)}
>
{branches.map(branch =>{
return (
<PickerIOS.Item key={branch.id} label={branch.name} value={branch.id}/>
);
})}
</PickerIOS>
これで値とインデックスを取得できますが、配列のインデックスではなくデータベースからインデックスを取得したいと思います。
onPickerValueChange = (value, index) => {
this.setState(
{
pickerSelected: value
},
() => {
console.log(value, index);
}
);
}
助けてくれてありがとう。
インデックスを使用して配列要素を取得します。
onPickerValueChange = (value, index) => {
this.setState(
{
pickerSelected: value
},
(name, index) => {
console.log(branches[index]);
}
);
}
最後に、問題を修正できます。私はそれが良い解決策ではないことを知っています、しかし少なくともそれは今私が望むものとしてうまくいきました:)
constructor(props) {
super(props);
pickerSelected: '',
defaultSelected: 'Select branch's name',
}
そしてここで私が自分の状態を更新する方法
onPickerValueChange = (value) => {
const { branches } = this.state;
let branchName = branches.find(branch => branch.id === value);
this.setState(
{
pickerSelected: value,
defaultSelected: branchName.name
}
);
}
これが同じ問題に遭遇する他の人々を助けることができることを願っています:)