2017-10-05 79 views
0

我有两个组件,RaisedButton和TableList。 Tablelist返回select行,并且在状态(currentSelectedRows)中更新相同的行。 RaisedButton只是简单地调整currentSelectedRows。现在的问题陈述:onClick触发不同的功能

onClick RaisedButton它正确地调节状态(使用approveSelected)直到updateSelectedRows不更新状态。一旦状态在updateSelectedRows方法内更新,onClick RaisedButton组件首先调用updateSelectedRows,然后批准已选中。以下是代码。

export default class MyList extends React.Component { 
constructor(props) { 
    super(props); 
    this.state = { 
     pendingList:[], 
     currentSelectedRows:[] 
    } 
}updateSelectedRows(selectedRows){ 
    console.log("updateCalled"); 
    this.setState({ 
     currentSelectedRows:selectedRows 
    }); 
}; 

approveSelected() { 
    console.log("approve selected"); 
    console.log(this.state.currentSelectedRows); 
}; 
render() { 
    return (
     <div className="container"> 
      <div className="row_align_right"> 
       <RaisedButton label="APPROVE" backgroundColor={MUIColors.lightGreen500} labelColor={MUIColors.white} onClick={this.approveSelected.bind(this)} /> 
      </div> 
      <div className="content"> 
       <div className=""> 
        <TableList 
         selectedRows={this.state.currentSelectedRows} 
         updateSelectedRows={this.updateSelectedRows.bind(this)} 
        /> 
       </div> 
      </div> 
     </div> 
    ) 
} 

}

任何意见将是很大的帮助。

感谢

回答

0

您没有为TableList提供的代码,所以很难知道可能是什么问题,但它似乎工作时,你只是传递一个行ID向上父:

const usersList = [ 
 
    { name: 'John', age: 33 }, 
 
    { name: 'Jane', age: 32 }, 
 
    { name: 'David', age: 28 }, 
 
    { name: 'Eve', age: 29 }, 
 
]; 
 

 

 
class Row extends React.Component { 
 
    onClick = e => { 
 
    const { onClick, rowId } = this.props; 
 
    onClick(rowId) 
 
    } 
 

 
    render() { 
 
    const { user } = this.props; 
 
    return (
 
     <tr onClick={this.onClick}> 
 
     <td>{user.name}</td> 
 
     <td>{user.age}</td> 
 
     </tr> 
 
    ); 
 
    } 
 
} 
 

 
class TableList extends React.Component { 
 
    onClick = rowId => { 
 
    this.props.updateSelectedRows(rowId); 
 
    } 
 

 
    render() { 
 
    return (
 
     <table> 
 
     <thead> 
 
      <tr> 
 
      <th>Name</th> 
 
      <th>Age</th> 
 
      </tr> 
 
     </thead> 
 
     <tbody> 
 
      { 
 
      usersList.map((user, i) => <Row key={i} rowId={i} user={user} onClick={this.onClick}/>) 
 
      } 
 
     </tbody> 
 
     </table> 
 
    ); 
 
    } 
 
} 
 

 
class MyList extends React.Component { 
 
    constructor(props) { 
 
    super(props); 
 
    this.state = { 
 
     pendingList: [], 
 
     currentSelectedRows: [] 
 
    } 
 
    } updateSelectedRows(selectedRows) { 
 
    console.log("updateCalled"); 
 
    this.setState({ 
 
     currentSelectedRows: selectedRows 
 
    }); 
 
    }; 
 

 
    approveSelected() { 
 
    console.log("approve selected"); 
 
    console.log(this.state.currentSelectedRows); 
 
    }; 
 
    render() { 
 
    return (
 
     <div className="container"> 
 
     <div className="row_align_right"> 
 
      <button onClick={this.approveSelected.bind(this)}>Click</button> 
 
     </div> 
 
     <div className="content"> 
 
      <div className=""> 
 
      <TableList 
 
       selectedRows={this.state.currentSelectedRows} 
 
       updateSelectedRows={this.updateSelectedRows.bind(this)} 
 
      /> 
 
      </div> 
 
     </div> 
 
     </div> 
 
    ) 
 
    } 
 
} 
 

 
ReactDOM.render(<MyList />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> 
 
<div id="root"></div>

+0

是这个问题是在我的TableList代码,我用材料UI的

组成部分,它具有deselectOnClickaway的属性,(这是默认为true)。所以错误是,每当我单击表外部件时,所有选定的字段都被取消选择,这进一步触发了我的updateSelectedRows方法。 – adarsh723