Alors, essayé d'utiliser des données de DataTable dans ReactJS, je veux mettre un onclick dans la colonne, mais obtenir une erreur.
suivi est mon code: p>
const $ = require('jquery')
$.DataTable = require('datatables.net')
class Rmsdatatable extends Component {
constructor(props) {
super(props)
this.handletableclick = this.handletableclick.bind(this)
}
handletableclick(event) {
console.log(event)
}
componentDidUpdate() {
console.log(this.props.data)
this.$el = $(this.el)
this.$el.DataTable(
{
data: this.props.data,
scrollY: 520,
paging: false,
responsive: true,
columns: [
{
data: "vfdSno",
render: function (data, type, row) {
return '<a onClick={' + this.handletableclick.bind(this, row) + '} >' + data + '</a>'
}
},
{ data: "customerName" },
{ data: "district" },
{ data: "state" }
]
}
)
}
render() {
return (
<div style={{ 'padding': '10px' }} className="col-xs-10">
<table id="example" className="display" width="100%" ref={el => this.el = el}>
<thead>
<tr>
<th>VFD/Controller No</th>
<th>Beneficiary</th>
<th>District</th>
<th>State</th>
</tr>
</thead></table>
</div>
)
}
}
4 Réponses :
return (<a onClick={ this.handletableclick.bind(this, row) }>{ data }</a>)
Replace current return statement with the one from above. You don't need to return a string of your html tag.
Il suffit de supprimer la fonction de maintableclick de la composante et de la créer sous forme de: const Handlebleclick = () => {// Faites votre chose} que d'appeler sans cela.
A tenté. pas de chance.
Essayez ceci au lieu de p>
Cela semble être un problème d'étendue. Essayez ce qui suit:
Pouvez-vous télécharger un exemple de code en direct qui reproduit ce problème? Cela nous aidera à trouver le problème rapidement
Pouvez-vous essayer comme ceci:
columnDefs: [
{
targets: 1,
createdCell: (td, cellData, rowData, row, col) =>
ReactDOM.render(
<button
onClick={() => this.handletableclick(row) }>
data
</button>, td),
}
]
Cette réponse devrait être acceptée par la personne qui a posé la question posée. Parce que je suis confronté à la même question et à ce que le "CreatCell" a fait le travail pour moi.
Ceci est la solution correcte pour ce problème. Il m'a fallu des âges pour le trouver. Merci!