2017-08-30 78 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調用的返回值沒有在任何地方使用。你將不得不更改您的代碼

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) 
}); 

不過,我會建議你不要在的setState做複雜的計算和抽象出來的計算外像

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

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) 
    }); 
相關問題