मैं अनिवार्य रूप से प्रतिक्रिया में टैब बनाने की कोशिश कर रहा हूं, लेकिन कुछ मुद्दों के साथ।
यहाँ फ़ाइल है page.jsx
<RadioGroup>
<Button title="A" />
<Button title="B" />
</RadioGroup>
जब आप बटन A पर क्लिक करते हैं, तो RadioGroup घटक को बटन B का चयन करना होता है ।
"चयनित" का अर्थ केवल एक राज्य या संपत्ति से एक वर्गनाम है
यहाँ है RadioGroup.jsx
:
module.exports = React.createClass({
onChange: function( e ) {
// How to modify children properties here???
},
render: function() {
return (<div onChange={this.onChange}>
{this.props.children}
</div>);
}
});
स्रोत Button.jsx
वास्तव में मायने नहीं रखता है, इसमें एक नियमित HTML रेडियो बटन है जो मूल डोम onChange
इवेंट को ट्रिगर करता है
अपेक्षित प्रवाह है:
- बटन "ए" पर क्लिक करें
- बटन "ए" ऑनग्रो, देशी डोम इवेंट को चलाता है, जो रेडियोग्रुप तक बुलबुले रखता है
- RadioGroup onChange श्रोता को कहा जाता है
- RadioGroup को बटन B को डी-सेलेक्ट करना होगा । यह मेरा सवाल है।
यहाँ मुख्य समस्या यह है कि मैं का सामना कर रहा हूँ है: मैं नहीं ले जा सकते <Button>
में रोंRadioGroup
, क्योंकि इस की संरचना ऐसी है कि बच्चे हैं मनमाने ढंग से । यानी मार्कअप हो सकता है
<RadioGroup>
<Button title="A" />
<Button title="B" />
</RadioGroup>
या
<RadioGroup>
<OtherThing title="A" />
<OtherThing title="B" />
</RadioGroup>
मैंने कुछ चीजें आजमाई हैं।
प्रयास करें: में RadioGroup
की onChange हैंडलर:
React.Children.forEach( this.props.children, function( child ) {
// Set the selected state of each child to be if the underlying <input>
// value matches the child's value
child.setState({ selected: child.props.value === e.target.value });
});
मुसीबत:
Invalid access to component property "setState" on exports at the top
level. See react-warning-descriptors . Use a static method
instead: <exports />.type.setState(...)
प्रयास करें: में RadioGroup
की onChange हैंडलर:
React.Children.forEach( this.props.children, function( child ) {
child.props.selected = child.props.value === e.target.value;
});
समस्या: कुछ नहीं होता है, यहां तक कि मैं Button
कक्षा को एक componentWillReceiveProps
विधि देता हूं
प्रयास: मैंने बच्चों के लिए माता-पिता की कुछ विशिष्ट स्थिति को पारित करने का प्रयास किया, इसलिए मैं सिर्फ माता-पिता की स्थिति को अपडेट कर सकता हूं और बच्चों को स्वचालित रूप से जवाब देना होगा। RadioGroup के रेंडर फ़ंक्शन में:
React.Children.forEach( this.props.children, function( item ) {
this.transferPropsTo( item );
}, this);
मुसीबत:
Failed to make request: Error: Invariant Violation: exports: You can't call
transferPropsTo() on a component that you don't own, exports. This usually
means you are calling transferPropsTo() on a component passed in as props
or children.
खराब समाधान # 1 : प्रतिक्रिया-addons.js cloneWithProps विधि का उपयोग करें बच्चों को क्लोन RadioGroup
करने के लिए उन्हें सौंपने में सक्षम होने के लिए समय देने के लिए विधि
बुरा समाधान # 2 : HTML / JSX के आसपास एक अमूर्त को लागू करें ताकि मैं गुणों में गतिशील रूप से पास कर सकूं (मुझे मार डालो):
<RadioGroup items=[
{ type: Button, title: 'A' },
{ type: Button, title: 'B' }
]; />
और फिर RadioGroup
गतिशील रूप से इन बटनों का निर्माण करें।
यह सवाल मेरी मदद नहीं करता है क्योंकि मुझे अपने बच्चों को यह जानने की आवश्यकता है कि वे क्या कर रहे हैं
RadioGroup
संभवतः यह कैसे जान सकता है कि उसे अपने मनमाने बच्चों की किसी घटना पर प्रतिक्रिया देने की आवश्यकता है? इसके बच्चों के बारे में कुछ जानना जरूरी है।