সাধারণ পুরানো জাভাস্ক্রিপ্টে আমার ডিআইভি আছে
<div class="movie" id="my_movie">
এবং নিম্নলিখিত জাভাস্ক্রিপ্ট কোড
var myMovie = document.getElementById('my_movie');
myMovie.addEventListener('nv-enter', function (event) {
console.log('change scope');
});
এখন আমার একটি প্রতিক্রিয়া উপাদান রয়েছে, এই উপাদানটির ভিতরে, রেন্ডার পদ্ধতিতে, আমি আমার ডিভিটি ফিরিয়ে দিচ্ছি। আমি কীভাবে আমার কাস্টম ইভেন্টের জন্য ইভেন্ট শ্রোতা যুক্ত করতে পারি? (আমি এই লাইব্রেরিটি টিভি অ্যাপগুলির জন্য ব্যবহার করছি - নেভিগেশন )
import React, { Component } from 'react';
class MovieItem extends Component {
render() {
if(this.props.index === 0) {
return (
<div aria-nv-el aria-nv-el-current className="menu_item nv-default">
<div className="indicator selected"></div>
<div className="category">
<span className="title">{this.props.movieItem.caption.toUpperCase()}</span>
</div>
</div>
);
}
else {
return (
<div aria-nv-el className="menu_item nv-default">
<div className="indicator selected"></div>
<div className="category">
<span className="title">{this.props.movieItem.caption.toUpperCase()}</span>
</div>
</div>
);
}
}
}
export default MovieItem;
আপডেট # 1:
আমি উত্তরে প্রদত্ত সমস্ত ধারণা প্রয়োগ করেছি। আমি ডিবাগ মোডে নেভিগেশন লাইব্রেরি সেট করেছি এবং আমি কেবল কীবোর্ডের উপর ভিত্তি করে আমার মেনু আইটেমগুলিতে নেভিগেট করতে সক্ষম হয়েছি (আপনি স্ক্রিনশটে দেখতে পাচ্ছেন যে আমি চলচ্চিত্র 4 তে নেভিগেট করতে সক্ষম হয়েছি) তবে যখন আমি মেনুতে কোনও আইটেম ফোকাস করি বা এন্টার টিপুন, আমি কনসোলে কিছুই দেখতে পাচ্ছি না।
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
class MenuItem extends Component {
constructor(props) {
super(props);
// Pre-bind your event handler, or define it as a fat arrow in ES7/TS
this.handleNVFocus = this.handleNVFocus.bind(this);
this.handleNVEnter = this.handleNVEnter.bind(this);
this.handleNVRight = this.handleNVRight.bind(this);
}
handleNVFocus = event => {
console.log('Focused: ' + this.props.menuItem.caption.toUpperCase());
}
handleNVEnter = event => {
console.log('Enter: ' + this.props.menuItem.caption.toUpperCase());
}
handleNVRight = event => {
console.log('Right: ' + this.props.menuItem.caption.toUpperCase());
}
componentDidMount() {
ReactDOM.findDOMNode(this).addEventListener('nv-focus', this.handleNVFocus);
ReactDOM.findDOMNode(this).addEventListener('nv-enter', this.handleNVEnter);
ReactDOM.findDOMNode(this).addEventListener('nv-right', this.handleNVEnter);
//this.refs.nv.addEventListener('nv-focus', this.handleNVFocus);
//this.refs.nv.addEventListener('nv-enter', this.handleNVEnter);
//this.refs.nv.addEventListener('nv-right', this.handleNVEnter);
}
componentWillUnmount() {
ReactDOM.findDOMNode(this).removeEventListener('nv-focus', this.handleNVFocus);
ReactDOM.findDOMNode(this).removeEventListener('nv-enter', this.handleNVEnter);
ReactDOM.findDOMNode(this).removeEventListener('nv-right', this.handleNVRight);
//this.refs.nv.removeEventListener('nv-focus', this.handleNVFocus);
//this.refs.nv.removeEventListener('nv-enter', this.handleNVEnter);
//this.refs.nv.removeEventListener('nv-right', this.handleNVEnter);
}
render() {
var attrs = this.props.index === 0 ? {"aria-nv-el-current": true} : {};
return (
<div ref="nv" aria-nv-el {...attrs} className="menu_item nv-default">
<div className="indicator selected"></div>
<div className="category">
<span className="title">{this.props.menuItem.caption.toUpperCase()}</span>
</div>
</div>
)
}
}
export default MenuItem;
আমি কিছু লাইন মন্তব্য করে রেখেছি কারণ উভয় ক্ষেত্রেই আমি কনসোল লাইনগুলি লগ করতে সক্ষম হই না।
আপডেট # 2: এই নেভিগেশন লাইব্রেরিটি এর মূল এইচটিএমএল ট্যাগগুলির সাথে প্রতিক্রিয়া নিয়ে ভাল কাজ করে না, সুতরাং আমার বিকল্পগুলি সেট করতে হয়েছিল এবং আরিয়া- * ব্যবহার করার জন্য ট্যাগগুলির নাম পরিবর্তন করতে হয়েছিল যাতে এটি প্রতিক্রিয়াটির কোনও প্রভাব ফেলবে না।
navigation.setOption('prefix','aria-nv-el');
navigation.setOption('attrScope','aria-nv-scope');
navigation.setOption('attrScopeFOV','aria-nv-scope-fov');
navigation.setOption('attrScopeCurrent','aria-nv-scope-current');
navigation.setOption('attrElement','aria-nv-el');
navigation.setOption('attrElementFOV','aria-nv-el-fov');
navigation.setOption('attrElementCurrent','aria-nv-el-current');
