আমি এই ইস্যুটিতে কেবল দৌড়েছি এবং আমি 15.0.1 15.0.2 প্রতিক্রিয়া ব্যবহার করছি এবং আমি ES6 সিনট্যাক্সটি ব্যবহার করছি এবং অন্যান্য উত্তরগুলি থেকে আমার যা প্রয়োজন তা বেশিরভাগই পাইনি যেহেতু সপ্তাহের আগে v.15 বাদ পড়েছিল এবং কিছু this.refs
বৈশিষ্ট্য ছিল অবচয় এবং অপসারণ করা হয়েছিল ।
সাধারণভাবে, আমার যা দরকার ছিল তা হ'ল:
- উপাদানটি মাউন্ট হয়ে গেলে প্রথম ইনপুট (ক্ষেত্র) উপাদানকে ফোকাস করুন
- ত্রুটি (জমা দেওয়ার পরে) দিয়ে প্রথম ইনপুট (ক্ষেত্র) উপাদানকে ফোকাস করুন
আমি ব্যাবহার করছি:
- প্রতিক্রিয়া ধারক / উপস্থাপনা উপাদান
- Redux
- প্রতিক্রিয়া-রাউটার
প্রথম ইনপুট উপাদানকে ফোকাস করুন
আমি পৃষ্ঠায় autoFocus={true}
প্রথমটি ব্যবহার করেছি <input />
যাতে যখন উপাদানটি মাউন্ট করবে তখন এটি ফোকাস পাবে।
ত্রুটি সহ প্রথম ইনপুট এলিমেন্টটি ফোকাস করুন
এটি বেশি সময় নিয়েছে এবং আরও সংশ্লেষিত হয়েছিল। আমি এমন কোড রাখছি যা ব্রেভিটির সমাধানের সাথে প্রাসঙ্গিক নয়।
রেডাক্স স্টোর / স্টেট
আমার ফোকাসটি সেট করা উচিত কিনা এবং এটি সেট হওয়ার পরে এটি নিষ্ক্রিয় করা উচিত কিনা তা জানতে আমার একটি বৈশ্বিক রাষ্ট্রের প্রয়োজন, সুতরাং উপাদানগুলি পুনরায় রেন্ডার componentDidUpdate()
করার সময় আমি পুনরায় সেটিং ফোকাস রাখি না (আমি ফোকাস সেট করার জন্য পরীক্ষা করতে ব্যবহার করব । )
আপনি নিজের অ্যাপ্লিকেশনটির জন্য উপযুক্ত হিসাবে এটি ডিজাইন করা যেতে পারে।
{
form: {
resetFocus: false,
}
}
ধারক উপাদান
উপাদানটি resetfocus
নিজের উপর ফোকাস সেট করে শেষ করে সম্পত্তিটি সাফ করার জন্য সম্পত্তি সেট এবং একটি কলব্যাক থাকা দরকার ।
আরও মনে রাখবেন, বেশিরভাগ আমার প্রকল্পের কারণে আমি আমার অ্যাকশন নির্মাতাদের পৃথক পৃথক ফাইলগুলিতে সংগঠিত করেছি এবং আমি এগুলি আরও পরিচালনাযোগ্য অংশগুলিতে বিচ্ছেদ করতে চেয়েছিলাম।
import { connect } from 'react-redux';
import MyField from '../presentation/MyField';
import ActionCreator from '../actions/action-creators';
function mapStateToProps(state) {
return {
resetFocus: state.form.resetFocus
}
}
function mapDispatchToProps(dispatch) {
return {
clearResetFocus() {
dispatch(ActionCreator.clearResetFocus());
}
}
}
export default connect(mapStateToProps, mapDispatchToProps)(MyField);
উপস্থাপনা উপাদান
import React, { PropTypes } form 'react';
export default class MyField extends React.Component {
// don't forget to .bind(this)
constructor(props) {
super(props);
this._handleRef = this._handleRef.bind(this);
}
// This is not called on the initial render so
// this._input will be set before this get called
componentDidUpdate() {
if(!this.props.resetFocus) {
return false;
}
if(this.shouldfocus()) {
this._input.focus();
this.props.clearResetFocus();
}
}
// When the component mounts, it will save a
// reference to itself as _input, which we'll
// be able to call in subsequent componentDidUpdate()
// calls if we need to set focus.
_handleRef(c) {
this._input = c;
}
// Whatever logic you need to determine if this
// component should get focus
shouldFocus() {
// ...
}
// pass the _handleRef callback so we can access
// a reference of this element in other component methods
render() {
return (
<input ref={this._handleRef} type="text" />
);
}
}
Myfield.propTypes = {
clearResetFocus: PropTypes.func,
resetFocus: PropTypes.bool
}
সংক্ষিপ্ত বিবরণ
সাধারণ ধারণাটি হ'ল প্রতিটি ফর্ম ক্ষেত্র যাতে ত্রুটি থাকতে পারে এবং মনোনিবেশ করতে পারে সেগুলি নিজেই পরীক্ষা করা দরকার এবং যদি এটি নিজের উপর ফোকাস সেট করা প্রয়োজন।
প্রদত্ত ক্ষেত্রটি ফোকাস সেট করার জন্য সঠিক ক্ষেত্র কিনা তা নির্ধারণ করার জন্য ব্যবসায়ের যুক্তি রয়েছে। এটি প্রদর্শিত হয়নি কারণ এটি পৃথক প্রয়োগের উপর নির্ভর করবে।
যখন কোনও ফর্ম জমা দেওয়া হয়, সেই ইভেন্টটির জন্য বিশ্বব্যাপী ফোকাস পতাকাটি resetFocus
সত্যে সেট করা দরকার । তারপরে প্রতিটি উপাদান নিজেই আপডেট হওয়ার সাথে সাথে এটি দেখতে পাবে যে এটি ফোকাস পায় কিনা তা খতিয়ে দেখা উচিত এবং যদি তা হয় তবে ফোকাসটি পুনরায় সেট করতে ইভেন্টটি প্রেরণ করুন যাতে অন্য উপাদানগুলিকে চেক করা চালিয়ে যেতে না হয়।
পার্শ্ব নোট হিসাবে সম্পাদনা করুন, আমার "ইউটিলিটিস" ফাইলটিতে আমার ব্যবসায়িক যুক্তি ছিল এবং আমি কেবল পদ্ধতিটি রফতানি করেছি এবং প্রতিটি shouldfocus()
পদ্ধতির মধ্যে এটিকে ডাকি ।
চিয়ার্স!