this.setStateのネストされた配列を更新します

Ryne

私は昨日この質問をしましたが、それを読んだとき、私はそれをうまく表現していないことに気づきました。言い換えさせてください。私が達成しようとしているのは、1つの初期グループ(配列)を持ち、ユーザーがさらにグループを作成できるようにする(配列を追加する)ことです。そして、各グループで彼らは画像をアップロードすることができます。そして、アップロードされた画像ごとに、尊敬されているグループ内でプレビューを表示したいと思います。

ここに画像の説明を入力してください

上の画像は最初のグループ(空の配列)です。これは私の現在の状態で見ることができます。

this.state = {
    data: {
        groups: [[]]
    },
    preview: [[]]
}

グループをマッピングして、input ["file"]と、写真のプレビューを表示する右側のdivで構成される上の画像を表示します。このコードはそのように見えます。

groups.map((element, index) => {
    return <div className="form-group" key={index}>
        <label htmlFor={"photos-" + index} className="form-group-label">Upload Photo</label>
        <input
            id={"photos-" + index}
            type="file"
            style={{display: 'none'}}
            onChange={(e, index) => this.handlePhotoChange(e, index)}
        />
        <div className="form-group-previews">
            {
                preview[index].map((image, id) => {
                    return <img key={id} src={image} alt={id} />
                })
            }
        </div>
    </div>
})

私が問題を抱えているのは、ファイルと画像のプレビューを、尊重されている配列(グループとプレビュー)の同じインデックスに入れることです。現在、私のonChangeイベントハンドラーは次のようになっています。

handlePhotoChange(e, index) {
    e.preventDefault()

    let reader = new FileReader()
    let file = e.target.files[0]

    const { data, preview } = this.state
    const { groups } = data

    reader.onloadend = () => {
        this.setState({
            data: {
                ...data,
                groups: [...groups, [...index, file]] // error
            },
            preview: [...preview, [...index, reader.result]] // error
        })
    }

    reader.readAsDataURL(file)
}

this.setStateのspread演算子では不可能にしようとしていることはありますか?私が達成したいことはもっと次のように行われるようです

groups[index]: [...groups[index], file]
preview[index]: [...preview[index], reader.result]

しかし、そのようなものは構文エラーです。これを行うためのより良い方法はありますか?

解決**

Sushanth-

インデックスに基づいて配列からアイテムを取得してから、取得fileしたばかりのアイテムにを追加する必要があります。

index は単なる数値であり、それに対してスプレッド演算子を適用しているため、エラーが発生します。

reader.onloadend = () => {
  // clone the array from state so that it is not mutated directly
  let clonedGroups = [...groups];
  let clonedPreview = [...preview];
  // grab the corresponding item based on the index
  let groupItem = clonedGroups[index] || [];
  let previewItem = clonedPreview[index] || [];

  // Update the corresponding item
  groupItem = [...groupItem, file];
  previewItem = [...previewItem, reader.result];

  // set the state with updated array objects
  this.setState({
    data: {
      ...data,
      groups: clonedGroups
    },
    preview: clonedPreview
  })
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

mongodbjavaのネストされた配列値を更新します

分類Dev

mongodbのネストされた配列を更新します

分類Dev

RethinkDBネストされた配列の要素を更新します

分類Dev

配列mongodb内のネストされた配列を更新しています

分類Dev

深くネストされた配列mongodbを更新します

分類Dev

arrayFiltersでネストされた配列を更新します

分類Dev

MongoDBでネストされた配列を更新します

分類Dev

ネストされた配列react.jsの状態を更新します

分類Dev

yamlのネストされた配列値をyqで更新します

分類Dev

Mongoのネストされた配列をc#で更新します

分類Dev

Reactredux-状態のネストされた配列を更新します

分類Dev

ネストされた配列の要素を不変に更新します

分類Dev

Javascript / Typescriptは、あるネストされた配列から別の配列にデータを更新します

分類Dev

ネストされた配列の要素を削除します

分類Dev

MongoDBを使用したネストされた配列の更新

分類Dev

ネストされた配列を更新していますが、間違った要素が更新されます

分類Dev

ReactFirestoreのネストされた配列のオブジェクトの値を更新します

分類Dev

mongodbで深くネストされた配列を更新します

分類Dev

MongoDB 4.0.12は、ネストされた配列を連結で更新します

分類Dev

ReQLを使用してRethinkDBのネストされた配列を更新する方法

分類Dev

ネストされたオブジェクトの配列で値を検索して更新します

分類Dev

ネストされた配列内のネストされた配列を更新

分類Dev

ReactJsの配列内のネストされたオブジェクトを更新します

分類Dev

Mongodbのネストされた配列内のオブジェクトを更新します

分類Dev

Node.js-Mongoose-req.bodyのすべての値でネストされた配列を更新します

分類Dev

MongoDBのエンティティのネストされた配列のプロパティを更新します

分類Dev

ネストされた配列マングース内の要素を更新しています

分類Dev

Mongoose MongoDB:ネストされた配列内のオブジェクトを更新します

分類Dev

ElasticSearch:配列内のネストされたドキュメントを更新しています

Related 関連記事

  1. 1

    mongodbjavaのネストされた配列値を更新します

  2. 2

    mongodbのネストされた配列を更新します

  3. 3

    RethinkDBネストされた配列の要素を更新します

  4. 4

    配列mongodb内のネストされた配列を更新しています

  5. 5

    深くネストされた配列mongodbを更新します

  6. 6

    arrayFiltersでネストされた配列を更新します

  7. 7

    MongoDBでネストされた配列を更新します

  8. 8

    ネストされた配列react.jsの状態を更新します

  9. 9

    yamlのネストされた配列値をyqで更新します

  10. 10

    Mongoのネストされた配列をc#で更新します

  11. 11

    Reactredux-状態のネストされた配列を更新します

  12. 12

    ネストされた配列の要素を不変に更新します

  13. 13

    Javascript / Typescriptは、あるネストされた配列から別の配列にデータを更新します

  14. 14

    ネストされた配列の要素を削除します

  15. 15

    MongoDBを使用したネストされた配列の更新

  16. 16

    ネストされた配列を更新していますが、間違った要素が更新されます

  17. 17

    ReactFirestoreのネストされた配列のオブジェクトの値を更新します

  18. 18

    mongodbで深くネストされた配列を更新します

  19. 19

    MongoDB 4.0.12は、ネストされた配列を連結で更新します

  20. 20

    ReQLを使用してRethinkDBのネストされた配列を更新する方法

  21. 21

    ネストされたオブジェクトの配列で値を検索して更新します

  22. 22

    ネストされた配列内のネストされた配列を更新

  23. 23

    ReactJsの配列内のネストされたオブジェクトを更新します

  24. 24

    Mongodbのネストされた配列内のオブジェクトを更新します

  25. 25

    Node.js-Mongoose-req.bodyのすべての値でネストされた配列を更新します

  26. 26

    MongoDBのエンティティのネストされた配列のプロパティを更新します

  27. 27

    ネストされた配列マングース内の要素を更新しています

  28. 28

    Mongoose MongoDB:ネストされた配列内のオブジェクトを更新します

  29. 29

    ElasticSearch:配列内のネストされたドキュメントを更新しています

ホットタグ

アーカイブ