2017-12-15 39 views
0

このコードが列の適切な並べ替えを正しく行えない理由を知る手がかりはありますか?reactjsを使用した複数のソートテーブル

sort(key){ 
    this.setState({ 
     [`toggle-${key}`]: !this.state[`toggle-${key}`], 
     data: sortBy(this.state.data, [key], this.state[`toggle-${key}`]).map(v => v) 
    }) 
    } 
    render() { 
    return (
     <div style={styles}> 
     <table> 
      <thead> 
      {Object.keys(this.state.data[0]).map(v => { 
       return(
       <th onClick={()=>this.sort(v)}> 
        {v.toUpperCase()} 
       </th> 
      ) 
       })} 
      </thead> 
      <tbody> 
      {this.state.data.map(v=>{ 
       return(
       <tr> 
        <td>{v.id}</td> 
        <td>{v.name}</td> 
       </tr> 
      ) 
      })} 
      </tbody> 
     </table> 
     </div> 
    ); 
    } 

状態の切り替えは正しいと思われますが、反射は初めて発生しています。

https://codesandbox.io/s/zqno7m7j4p

+0

は真と偽のではないでしょうか?デモを追加しました、私はトグルできるようにソートする必要があります。 –

+0

3番目の引数は、インデックスに必要な 'this'値を表すものとします。あなたのコードはそうであるように動作しているようです。サンドボックスはうまくいくようです。両方の行の並べ替えが機能しています。 –

+0

@KyleRichardsonは働いていますが、切り替えることはできません。私はそれをトグルすることを期待しています。 sortByではなくorderByを使うべきですか? –

答えて

1

Lodashの_.sortBy()は降順または昇順を選択する能力を持っていません。代わりに(sandbox_.orderBy()を使用します。第3引数@KyleRichardson

sort(key) { 
    const columnState = !this.state[`toggle-${key}`]; 

    this.setState({ 
    [`toggle-${key}`]: columnState, 
    data: orderBy(
     this.state.data, 
     [key], 
     columnState ? 'desc' : 'asc' 
    ) 
    }); 
} 
+0

素晴らしい!これだよ。しかし、私はそれが 'columnStateであるべきだと思いますか? 'asc': 'desc'' –

+0

あなたが好きなものを選んでください。 'id'の1回目のクリックが何の変化も示さないので、私は' asc': 'desc'を選択しませんでした。 –