2017-05-01 60 views
3

只是爲了提供更廣泛的上下文 - 我最終的目標是增強可編輯單元與同步圖標,如果與後端同步。添加自定義道具到組件實例(不通過父) - react-data-grid

我仍然試圖添加自定義道具特定編輯單元格,以表示syncedWithBackEnd = true/false,然後定製格式化有條件地添加樣式(如果使用DB道具同步是)。

問題是
我未能兌現這個自定義道具到Cell實例

到目前爲止已經試過:

  1. 提供回調格式化和從外部調用它。沒有找到方法調用Formatter實例上的函數(連接到特定單元格)

  2. 將prop設置爲handleRowUpdated邏輯的一部分。設置自定義道具,但它沒有達到細胞:

    var rows = this.getRows(); ... // e.updated.customProp = "whatever" ---> fails to reach Cell Object.assign(rows[e.rowIdx], e.updated); this.setState({rows: rows});

就如何實現這一目標的任何想法?
或者,也許有一些明顯的方法來達到我完全錯過的最終目標
(必須提到我是React新人,對js來說很新穎)。

回答

1

實際同步發生時(在想更新您的自定義單元格之前)我假設它是用回調完成的?如果是這樣,那麼遠程ajax調用來更新值的回調可以更新this.state.rows.customProp(this.state.rows.whatever.customProp),並且一旦狀態發生變化並假設您的getRows()從this.state.rows獲得,然後它將全部自動發生。更糟糕的情況是,您可能必須在更改狀態值後添加對this.forceupdate()的調用。這是基於什麼我有類似的聲音和作品......

//column data inside constructor (could be a const outside component as well) 
this.columnData = [ 
{ 
    key: whatever, 
    name: whatever, 
    ... 
    formatter: (props)=>(<div className={props.dependentValues.isSynced? "green-bg" : "")} onClick={(evt)=>this.clickedToggleButton} >{props.value}</div>), 
    getRowMetaData: (data)=>(data), 
}, 
... 

} 
] 

這是我的數據網格的包裝部件的回調函數...

//when a span 
    clickedToggleButton(evt, props){ 
     //do remote ajax call we have an ajax wrapper util we created so pseudo code... 
     MyUtil.call(url, params, callback: (response)=>{ 
     if(this.response.success){ 
      let rows = this.state.rows; 
      let isFound = false; 
      for(let obj of rows){ 
      if(obj.id==props.changedId){ 
       obj.isSynced = true; 
       isFound = true; 
       break; 
      } 
      } 
      //not sure if this is needed or not... 
      if(isFound){ this.forceUpdate(); } 
     } 
     } 
    } 

不知道這是否幫助,但可能會讓你開始

相關問題