اذهب إلى المحتوى

السؤال

نشر

أنا أتساءل عن كيفية استخدام مراجع لعدة عناصر دينامكيا مثال هكذا 

const { useRef, useState, useEffect } = React;

const App = () => {
  const elRef = useRef();
  

  return (
    <div>
      {data && data.posts.map((post) => (
        <div ref={elRef} >
           {post.tilte}
        </div>
      ))}
    </div>
  );
};

لكن في المثال الذي أرفقته هو مرجع واحد لعدة عناصر وانا اريد كل عنصر يمتلك مرجع خاص به دينامكيا

Recommended Posts

  • 0
نشر

يمكنك عمل ذلك بأن تقوم بعمل array of refs وليس مرجع واحد كالآتي 
 

const { useRef, useState, useEffect, createRef } = React;

const App = () => {
  // const elRef = useRef();
  const dataRefs = useRef(data.posts.map(() => createRef())); // مصفوفة من ال مراجع
  

  return (
    <div>
      {data && data.posts.map((post، index) => (
        <div ref={elementsRef.current[index]} > // هنا نستخرج المرجع المخصص لكل عنصر بناء على ال index
           {post.tilte}
        </div>
      ))}
    </div>
  );
};

 

  • 0
نشر

يمكننا تحقيق هذا عن طريق استخدام useRef مع createRef.

const data = {
  posts: [
    { title: 'كورس جافاسكريبت' },
    { title: 'كورس علوم الكمبيوتر' }
  ]
};

/**
 * سنقوم بكتابة مكون يطبع عناوين المقالات وبه مدخل نصي
 * .وزر لتغيير لون العناوين
 */
const App = () => {
  // .نستخدمها بالطريقة العادية للحصول على قيمة اللون
  const colorRef = React.useRef(null);

  // .هنا سنقوم بحفظ المراجع للمقالات
  // .ستلاحظ هنا ان قيمة المرجع هي مصفوفة من المراجع
  const references = React.useRef(
    data.posts.map(() => React.createRef())
  );

  // .دالة بسيطة للحصول على اللون ونداء العناصر لكل مرجع
  const changeColor = color => {
    // .لاحظ كيف يتم الوصول لمرجع كل مقالة
    references.current.forEach(ref => {
      ref.current.style.color = color;
    });
  };

  return (
    <div>
      {
        data && data.posts.map((post, id) => (
          <div ref={references.current[id]}>
            <h1>{post.title}</h1>
          </div>
        ))
      }
      <input ref={colorRef} type="text" placeholder="#AEF266" />
      <button onClick={() => {
          changeColor(colorRef.current.value);
      }}>تغيير اللون</button>
    </div>
  );
};

ReactDOM.render(
  <App />,
  document.getElementById('root')
);

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...