2017-12-15 4 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

은 true 및 false 아닌가요? 데모를 추가했습니다. 토글 할 수 있도록 정렬해야합니다. –

+0

세 번째 인수는 인덱스를 원하는'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이어야한다고 생각하니? '오름차순': 'desc'' –

+0

원하는 것을 선택하십시오. 'id'를 처음 클릭 할 때 변경 사항이 나타나지 않기 때문에'asc' :'desc'를 선택하지 않았습니다. –