2017-08-30 8 views
0

配列内のオブジェクトのプロパティを変更することでもう一度問題が発生しましたが、今回は配列内の配列内の配列です...reactJs setState配列内の配列内のオブジェクトのプロパティを変更する

画像のプレビューを変更する際に問題が発生しました。

これは効果がありません:

return { 
    ...picture, 
    preview: "hallo" 
} 

完全なコードは次のとおりです。

this.setState((prevState) => ({ 
    stepsData: prevState.stepsData.map(step => { 
     if (step.identifier === stepIdentifier) { 
      console.log("lkkljk",step) 

      step.onChangeContentComponents.map(
       contentComponent => { 
        if (contentComponent.pictures !== null){ 
         console.log(contentComponent.pictures); 
         console.log(contentComponent.pictures[0].preview); 

         contentComponent.pictures.map(picture => { 
          return { 
           ...picture, 
           preview: "hallo" 
          } 
         }); 
        } 
        return contentComponent 
       } 
      ); 

      return { 
       ...step, 
       [targetArray]: newArray, 
      } 
     } 
     return step 
    }) 
}),() => { 
    console.log(this.state.stepsData) 
}); 

感謝。

答えて

1

step.onChangeContentComponents.map呼び出しの戻り値がどこにも使用されていないという問題があります。あなたは、私が外

var stepsData = [...this.state.stepsData]; 
stepsData = stepsData.map(step => { 
     if (step.identifier === stepIdentifier) { 

      var newStep = step.onChangeContentComponents.map(
       contentComponent => { 
        if (contentComponent.pictures !== null){ 
         console.log(contentComponent.pictures); 
         console.log(contentComponent.pictures[0].preview); 

         contentComponent.pictures.map(picture => { 
          return { 
           ...picture, 
           preview: "hallo" 
          } 
         }); 
        } 
        return contentComponent 
       } 
      ); 

      return newStep 
     } 
     return step 
    }); 

this.setState({stepsData},() => { 
    console.log(this.state.stepsData) 
}); 
+0

ザッツが動作しない可能性があり、ノー私はメソッドを呼び出し、エラーを得ました。 – Felix

+0

正確なエラー –

+0

TypeError:ProcessStep.render(未定義の )でプロパティ '長さ'を読み取ることができません(評価版./src/frontend/component/processes/processSteps/ProcessStep.js(bundle.js:12154)、:116: 61) – Felix

1

のような計算がそれを解決するためにimmutability-helper utilのを使用してみてくださいアウトSETSTATEに複雑な計算をしないために、あなたに助言し、抽象的になるしかし

this.setState((prevState) => ({ 
    stepsData: prevState.stepsData.map(step => { 
     if (step.identifier === stepIdentifier) { 
      console.log("lkkljk",step) 

      var newStep = step.onChangeContentComponents.map(
       contentComponent => { 
        if (contentComponent.pictures !== null){ 
         console.log(contentComponent.pictures); 
         console.log(contentComponent.pictures[0].preview); 

         contentComponent.pictures.map(picture => { 
          return { 
           ...picture, 
           preview: "hallo" 
          } 
         }); 
        } 
        return contentComponent 
       } 
      ); 

      return newStep 
     } 
     return step 
    }) 
}),() => { 
    console.log(this.state.stepsData) 
}); 

にコードを変更する必要があります。

これ以前のこのユーティリティは、react-addons-updateモジュールに含まれていました。

0

ソリューションは

let stepsData = [...this.state.stepsData]; 
    stepsData = stepsData.map(step => { 
     if (step.identifier === stepIdentifier) { 
      return { 
       ...step, 
       [targetArray]: newArray, 
       onChangeContentComponents: step.onChangeContentComponents.map(contentComponent => { 
         if (contentComponent.pictures !== null) { 
          return { 
           ...contentComponent, 
           pictures: contentComponent.pictures.map(picture => { 
            console.log(picture) 
            return { 
             ...picture, 
             preview: "hallo" 
            } 
           }) 
          } 
         } 
         return contentComponent 
        } 
       ) 
      } 
     } 
     return step 
    }); 
    this.setState({stepsData: stepsData},() => { 
     console.log(this.state.stepsData) 
    }); 
関連する問題