مرحبا شباب!
لذلك أكتب في هذا التطبيق يوجد مكون يسمى "قسم المساعدة". إنه في الأساس مربع يعرض بعض النصوص المحددة مسبقًا حول المكون الذي يعبث به المستخدم.
أريد أن أكون قادرًا على إخبار مكون "قسم المساعدة" الخاص بي بالمكون الذي يجب إظهار المساعدة له. اعتبارًا من الآن ، أستخدم Flux مع بعض الإجراءات ومتجر. هذا ليس سيئًا للغاية ويعمل بشكل جيد جدًا ، ولكنه إعداد كبير جدًا ، حيث تم تحديد ملفين خصيصًا لهذا السبب. هناك أيضًا عدد من المشكلات الأخرى التي واجهتها مثل إرسال إجراءات "قسم المساعدة" بسبب إجراءات أخرى (مما يؤدي إلى ظهور خطأ "لا يمكن الإرسال في منتصف إرسال").
ومع ذلك ، إذا كان بإمكاني تحديد "قسم المساعدة" باعتباره منفردًا ، import helpSection from './HelpSection
والانتهاء من ذلك ، حيث سأحصل على مثيل "قسم المساعدة". كل ما علي فعله هو كشف طريقة على helpSection
تعين الخصائص التي أريد تغييرها واستدعائها.
أعلم أنه يكسر تدفق البيانات أحادي الاتجاه في React ، مع تغيير مكون لمكون آخر ، ولكن ربما يكون الأمر يستحق ذلك في بعض الأحيان. الطريقة التي أفكر بها في الأمر ، هي نوع من مزيج من متجر وبعض الإجراءات ومكون في كائن واحد. سيتم إنشاء الكثير من المكونات مرة واحدة فقط في وقت التشغيل ، لذا ربما تكون مفيدة جدًا في بعض الحالات.
لم أتمكن من العثور على أي إشارة إلى هذا على الويب بخلاف JSfiddle ، والتي يبدو أنها تعمل بشكل جيد (إنها IMO غير واضحة بعض الشيء). هل هذه طريقة جيدة للقيام بذلك؟
أنا مبتدئ تمامًا في JavaScript و React ، لذا قد أفتقد بعض النقاط الواضحة ، وآمل ألا أفقدها.
ما رأيك بهذا؟
شكرا للقراءة.
(ملاحظة: آسف لأي غموض ، اللغة الإنجليزية ليست لغتي الأم ...: ابتسم :)
يبدو هذا وكأنه سؤال استخدام ، وليس خطأ في قلب React. تتم الإجابة على أسئلة الاستخدام بشكل أفضل على مواقع مثل StackOverflow ، حيث نحاول استخدام مشكلات github لتتبع الأخطاء في React core. لهذا السبب ، سأغلق هذه المشكلة ، لكن لا تتردد في متابعة المحادثة هنا أو نقلها إلى StackOverflow.
فيما يتعلق بسؤالك ، فإن توصيتي الشخصية هي أن تتجنب الأفراد المنفردين.
http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons
شكرا على الرد.
هل توجد بالفعل طريقة لإنشاء مكونات React كأجزاء مفردة لست على علم بها؟ (أنا لا أثق في JSfiddle حتى يتم تقييمها من قبل أحدكم من كبار السن). إذا كان الأمر كذلك ، فيرجى مشاركته معي ، حيث لم أتمكن من العثور على أي شيء عنه في المستندات.
من صفحة مستند "التواصل بين المكونات" :
للتواصل بين مكونين ليس لهما علاقة بين الوالدين والطفل ، يمكنك إعداد نظام الأحداث العالمي الخاص بك.
...
نمط التدفق هو أحد الطرق الممكنة لترتيب ذلك.
كما ترون ، لم يتم ذكر الفردي. في رابط StackOverflow الذي قدمته ، قال الكثير من الأشخاص في الواقع إن استخدام الأحرف المفردة مفيد في بعض الحالات. من الجواب الثاني:
يحل الفرديون مشكلة واحدة (وواحدة فقط).
التنازع على الموارد.
إذا كان لديك بعض الموارد
(1) يمكن أن يكون له مثيل واحد فقط ، و
(2) تحتاج إلى إدارة هذا المثال الفردي ،
أنت بحاجة إلى مفردة.
يبدو هذا مثل حالة الاستخدام الخاصة بي (وعدد قليل جدًا في عالم React).
أعتقد أن هذا لا يزال ذا صلة كقضية على GitHub لأنه يبدو أنه طريقة ذات صلة لاستخدام المكونات ، وأعتقد أن المستندات يجب أن تحتوي على مرجع لها.
تحتوي مثيلات مكون React على حالة داخلية مطلوبة لمعرفة مكان وجود هذا المثيل داخل الشجرة. لا يمكنك عرض نفس المثيل في أماكن متعددة. لذلك فإن فكرة الأمثلة الفردية لا معنى لها في عالم React.
ما يظهر في هذا الكمان ليس حقًا ما يمكن أن أسميه مفردًا في الغالب بسبب حجة المثيل الفردي - إنه أشبه بوحدة مع حالتها الخاصة. ثم عندما يتم تقديم مثيل ، فإنه يستخدم الحالة المغلقة (ولكن "العالمية" بالفعل). إنه يخدع ويخزن إشارة إلى المثيل المثبت في حالته العالمية ويفرض تحديثًا على المثيل المثبت. الآن لا يوجد شيء يمنعك فعليًا من تقديم المزيد من هذه الأشياء ، مما قد يؤدي إلى عدم تحديث أول واحد. يمكنك بسهولة عمل شيء مشابه ودعم تقديم أكثر من 1.
أما بالنسبة لنا في الإشارة إلى هذا في مستنداتنا ، فلن نفعل ذلك. هناك الكثير من الأنماط التي يمكن تحقيقها باستخدام React لكننا لن نتحدث عنها جميعًا.
شكرا لأخذ الوقت الكافي للرد ، جيمس.
أولاً ، أفهم تمامًا نقاطك وأقدر حقيقة أنك ألقيت نظرة على JSfiddle. اسمحوا لي فقط أن أدلي ببيان نهائي.
أريد أن أجعل الأشياء التي كانت صعبة علي أسهل. أعتقد أن الأمر سيكون مجرد بضعة أسطر ويمكن أن يساعد المبتدئين في المستقبل.
دائمًا ما ينتهي بي الأمر بكتابة تعليقات ضخمة .. شكرًا على مواصلتي وقراءتي. :ابتسامة:
مرحبا @ all ،
أود إحياء هذه المحادثة بإضافة وجهة نظر أخرى. يتفاعل Wir البوابات . بالنسبة لحالة الاستخدام هذه ، أقوم بإنشاء مكونات مختلفة مثل الوسائط أو الإشعارات التي يجب تقديمها إلى مكون آخر معين يتم تحميله في App.jsx
مثل هذا.
App.jsx
[...]
render() {
return (<SingletonOverlay></SingletonOverlay>)
}
[...]
Notification.jsx
import React from 'react';
import ReactDOM from 'react-dom';
import NotificationComponent from './Notification.js';
import SingletonOverlay from '../general/Overlay.js';
export default class Notification extends React.Component {
constructor(props) {
super(props);
this.state = {
element: null
};
}
componentDidMount() {
this.setState({ element: ReactDOM.findDOMNode(SingletonOverlay) });
}
render() {
return this.state.element
? ReactDOM.createPortal(
<NotificationComponent>That is a notification</NotificationComponent>,
this.state.element,
)
: null;
}
}
سيكون الخيار الآخر هو العثور على domNode بـ document.findElementById
أو وظائف مشابهة وتمريرها إلى ReactDOM.findDOMNode
، مما يجعلني أشعر بعدم الارتياح لأنني مجبر على ترك "React-Cosmos".
لذلك ، أود أن أكون قادرًا على البحث عن مثيلات مكون معين أقوم بتمريره إلى الوظيفة ، بدلاً من تمرير المثيل نفسه ، للميزة المذكورة أعلاه. أنا مهتم أيضًا بالطرق الأخرى حول كيفية حل هذه المشكلة.
jimfb هل يستحق هذا اقتراح ميزة؟
التعليق الأكثر فائدة
مرحبا @ all ،
أود إحياء هذه المحادثة بإضافة وجهة نظر أخرى. يتفاعل Wir البوابات . بالنسبة لحالة الاستخدام هذه ، أقوم بإنشاء مكونات مختلفة مثل الوسائط أو الإشعارات التي يجب تقديمها إلى مكون آخر معين يتم تحميله في
App.jsx
مثل هذا.App.jsx
Notification.jsx
سيكون الخيار الآخر هو العثور على domNode بـ
document.findElementById
أو وظائف مشابهة وتمريرها إلىReactDOM.findDOMNode
، مما يجعلني أشعر بعدم الارتياح لأنني مجبر على ترك "React-Cosmos".لذلك ، أود أن أكون قادرًا على البحث عن مثيلات مكون معين أقوم بتمريره إلى الوظيفة ، بدلاً من تمرير المثيل نفسه ، للميزة المذكورة أعلاه. أنا مهتم أيضًا بالطرق الأخرى حول كيفية حل هذه المشكلة.
jimfb هل يستحق هذا اقتراح ميزة؟