2017-07-15 3 views
0

Je dois pousser le premier élément dans le tableau comme le dernier.Comment faire pour pousser le premier élément dans la rangée avec les aides d'immutabilité

Le problème est que c'est un lien vers l'objet. Comment le faire avec l'aide de l'immuabilité.

Mon code existant est ci-dessous.

state = { 
 

 
    table: [['', '', '', ''], 
 
      ['', '', '', ''], 
 
      ['', '', '', ''], 
 
      ['', '', '', '']], 
 
    } 
 

 

 
appendRow =() => { 
 
    
 
    let newTable = deepcopy(this.state.table); 
 

 
    newTable.push(this.state.table[0].slice()) 
 

 
    this.setState({ table: newTable }); 
 
    
 

 
}

Ce que j'ai avec helper immuabilité Je suggère pas bon

appendRow =() => { 
 
    this.setState({ table: update(this.state.table, { $push: [this.state.table[0].slice()] }) }); 
 
    }

parce que j'utilise slice() à nouveau.

Comment le faire mieux?

Répondre

0

Je ne sais pas immutability.js mais pour cela vous pouvez utiliser reduceRight, qui sont une pure function de la bibliothèque standard, comme suit:

table.reduceRight((a,e,i) => { i === 0 ? a.push(e) : a.unshift(e); return a }, []); 

Insertion dans votre exemple:

appendRow =() => { 
    this.state.table.reduceRight((a,e,i) => { i === 0 ? a.push(e) : a.unshift(e); return a }, []);}