مرحبا،
أنا أستخدم redux مع التفاعل الأصلي وهو أمر رائع حتى الآن!
لدي في تطبيقي ملفات تعريف مستخدمين ، ويبدو حالتي كما يلي:
{
users: {
"1": {id: "1", name: "Ran"},
"2": {id: "2", name: "Dan"}
}
}
لدي الآن مكون <Profile>
مستخدمًا واحدًا
class Profile extends React.Component {
componentDidMount() {
const { dispatch, userId } = this.props;
dispatch(loadUser(userId));
}
render() {
console.log(this.props.user.name);
}
}
عندما يتصاعد المكونة I بإرسال loadUser
عمل مع userId
مرت كما دعامة.
يؤدي هذا إلى تقديم طلب إلى واجهة برمجة التطبيقات ، وإضافة استجابة المستخدم إلى حالتي users
.
الآن ، أريد أن يتلقى مكون ملف التعريف الخاص بي المستخدم لتقديمه كعنصر أساسي.
لذلك أريد أن أفعل شيئًا مثل:
function mapStateToProps(state) {
return {
user: state.users[props.userId]
};
}
module.exports = connect(mapStateToProps)(Profile);
من الواضح أنه لا يمكن أن يعمل لأنني لا أستطيع الوصول إلى الدعائم.
لا يمكنني استخدام حالة مثل selectedProfile
للتصفية لأنني أقوم بعرض ملفات تعريف متعددة في حزمة التنقل الخاصة بي ، كل منها له معرف مستخدم مختلف ، إذا كنت أستخدم حالة الملف الشخصي المحددة العامة ، فإنها تكسر زر الرجوع.
الحل الوحيد الذي وجدته هو إنشاء مكون ProfileContainer
، والذي سيقوم بتصفية الحالة حسب الخاصية الخاصة بها وتمرير المستخدم الفردي إلى Profile
المكوّن.
class ProfileContainer extends React.Component {
render() {
let user = this.props.users[this.prop.userId];
return <Profile user={user} />
}
}
هل له معنى؟ أي شخص آخر واجه هذه المشكلة؟
شكر،
جرى.
مهلا،
هذه مشكلة رد فعل - إعادة ... ربما أفتقد شيئًا ما ، لكن يبدو الأمر بسيطًا جدًا بالنسبة لي ، استخدم وسيطة "ownProps" التي تم تمريرها إلى mapStateToProps ، لذلك سيبدو الكود أعلاه:
function mapStateToProps(state, ownProps) {
return {
user: state.users[ownProps.userId]
};
}
module.exports = connect(mapStateToProps)(Profile);
لديك حق الوصول إلى دعائم المكون. كيف يبدو ذلك؟ راجع https://github.com/rackt/react-redux#connectmapstatetoprops -mapdispatchtoprops-mergeprops-options لمزيد من التفاصيل أو https://github.com/rackt/redux/blob/master/examples/real-world/containers/ UserPage.js لمثال العالم الحقيقي ...
لا أصدق أنني فاتني ذلك! شكرا @ alanrubin
:رضى وقبول:
الرجاء تقديم مثل هذه المشكلات في رد الفعل والإعادة في المستقبل.
لا علاقة له بهذا المستودع.
التعليق الأكثر فائدة
مهلا،
هذه مشكلة رد فعل - إعادة ... ربما أفتقد شيئًا ما ، لكن يبدو الأمر بسيطًا جدًا بالنسبة لي ، استخدم وسيطة "ownProps" التي تم تمريرها إلى mapStateToProps ، لذلك سيبدو الكود أعلاه:
لديك حق الوصول إلى دعائم المكون. كيف يبدو ذلك؟ راجع https://github.com/rackt/react-redux#connectmapstatetoprops -mapdispatchtoprops-mergeprops-options لمزيد من التفاصيل أو https://github.com/rackt/redux/blob/master/examples/real-world/containers/ UserPage.js لمثال العالم الحقيقي ...