У меня есть следующий код.React.JS Невозможно прочитать свойство в контуре массива
var ImageList = React.createClass({
getComponent: function(index){
console.log(index);
},
render: function() {
var results = this.props.data;
return (
<div className="row">
{results.map(function(result) {
return(
<a className="th medium-3 columns" href="#" onClick= {this.getComponent.bind(this, 1)}>
<img alt="Embedded Image" key={result.id} src={"data:" + result.type + ";" + "base64," + result.image} />
</a>
)
})}
</div>
);
}
});
Вторая функция возврата в основном петли массива изображений и показывает их. Я хотел, чтобы событие OnClick
, когда щелкнуло, должно вызвать метод getComponent
. Однако если OnClick
события в цикле массива он выдает следующее сообщение об ошибке:
Uncaught TypeError: Cannot read property 'getComponent' of undefined.
Однако, если я использую тот же код и просто добавить onClick
даже после петлевой функции, как показано ниже:
var ImageList = React.createClass({
getComponent: function(index){
console.log(index);
},
render: function() {
var results = this.props.data;
return (
<div className="row">
{results.map(function(result) {
return(
<img alt="Embedded Image" key={result.id} src={"data:" + result.type + ";" + "base64," + result.image} />
)
})}
<a className="th medium-3 columns" href="#" onClick= {this.getComponent.bind(this, 1)}>
</div>
);
}
});
Заканчивается работа отлично. Но так как мне нужно сохранить уникальный идентификатор для каждого изображения, тогда я могу завершить оставшуюся функцию getComponent
, второй метод для меня не очень полезен. Следовательно, есть ли способ заставить его работать в Loop?
Я следовал второму методу. Будет ли это работать на всех браузерах? –
Еще раз спасибо, что я пробивал себе голову в течение последних 1 часа. : D –
@tonyhb в вашем втором примере вы не привязываетесь, вы просто сохраняете ссылку на 'this' в переменной' that'. Есть еще два варианта, вы можете фактически использовать 'bind (this)' для обратного вызова в 'map()', или еще проще вы также можете передать контекст как [второй аргумент] (https: //developer.mozilla. org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) к методу 'map()'. – danillouz