I am using react-bootstrap-table to implement table structure in React, I tried to add edit button and onClick function for that but its not working.
My code :
render(){
function test(){
alert("asd");
}
function imgFormatter(cell,row) {
return '<a href="#" onClick="test();"><i class="fa fa-pencil" aria-
hidden="true"></i></a>';
}
return(
<BootstrapTable data={this.state.members} bordered={ false } pagination={ true }>
<TableHeaderColumn isKey dataField='memberid' dataSort>ID</TableHeaderColumn>
<TableHeaderColumn dataField='name' dataSort>Name</TableHeaderColumn>
<TableHeaderColumn dataField='username' dataSort>Username</TableHeaderColumn>
<TableHeaderColumn dataField='email' dataSort>Email</TableHeaderColumn>
<TableHeaderColumn dataField='mobile'>Mobile</TableHeaderColumn>
<TableHeaderColumn dataField='edit' dataFormat={ imgFormatter }>Edit</TableHeaderColumn>
</BootstrapTable>
)
}
Am I implementing correctly? why edit onclick not working ? can anyone know how to add edit button in react-bootstrap-table
.
Am I implementing correctly?
No, Instead of returning the string from function, return the JSX.
Write the formatter function like this:
function imgFormatter(cell,row) {
return <a href="#" onClick={test}>
<i class="fa fa-pencil" aria-hidden="true"></i>
</a>;
}
why edit onclick not working ?
About Events in JSX, As per DOC:
Handling events with React elements is very similar to handling events on DOM elements. There are some syntactic differences:
React events are named using camelCase, rather than lowercase.
With JSX you pass a function as the event handler, rather than a string.
Suggestion:
Instead of defining these functions inside render method, i will suggest you to define outside of render method and use this
keyword to access.
Like this:
imgFormatter(cell,row) {
return <a href="#" onClick={this.test}>
<i class="fa fa-pencil" aria-hidden="true"></i>
</a>;
}
test(){
console.log('clicked');
}
render(){
return(
<BootstrapTable data={this.state.members} bordered={ false } pagination={ true }>
.....
<TableHeaderColumn dataField='edit' dataFormat={ this.imgFormatter.bind(this) }>Edit</TableHeaderColumn>
</BootstrapTable>
)
}