LoginSignup
1
1

More than 3 years have passed since last update.

React Native で Pickerのitemをmap()で簡潔に実装する方法

Last updated at Posted at 2020-07-06

やりたかったこと

React Native の Picker の item をmap()で簡潔に実装したい

間違った例

export default PickerSample = () => {
  const [number, setNumber] = useState(0);
  const numbers = [0, 1, 2, 3, 4, 5];  // <Picker.Item> に表示させたい値の配列

  return (
    <Picker
      style={styles.picker}
      itemStyle={styles.pickerItem}
      selectedValue={number}
      onValueChange={(itemValue) => setNumber(itemValue)}
    >
      {numbers.map((number, index) => {
        return (
          <Picker.Item
            key={index}
            label={number}
            value={index}
          />
         );
      })}
    </Picker>
  )
}

上記のコードで実行した結果、以下のエラーが出た

undefined is not an object (evaluating 'child.props.value')

解決方法

色々迷走した末...
<Picker.Item>labeltoString()を指定するだけでよかった。

export default PickerSample = () => {
  const [number, setNumber] = useState(0);
  const numbers = [0, 1, 2, 3, 4, 5];  // <Picker.Item> に表示させたい値の配列

  return (
    <Picker
      style={styles.picker}
      itemStyle={styles.pickerItem}
      selectedValue={number}
      onValueChange={(itemValue) => setNumber(itemValue)}
    >
      {numbers.map((number, index) => {
        return (
          <Picker.Item
            key={index}
            label={number.toString()}  // ここに追加
            value={index}
          />
         );
      })}
    </Picker>
  )
}

完成物

問題なく動きました
picker.gif

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1