redux-form एक प्रतिक्रिया अनुप्रयोग में रूपों के लिए रेडक्स बाइंडिंग प्रदान करने के लिए एक बहुत ही आकर्षक लाइब्रेरी है, जो सुपर-सुविधाजनक होना चाहिए। दुर्भाग्यवश, लाइब्रेरी के अपने उदाहरणों का उपयोग करके, मैं वास्तव में कुछ भी बाध्य करने में असफल रहा हूं, जो कि सुविधाजनक है।फॉर्म के इनपुट में रेडक्स-फॉर्म बाइंडिंग को वायरस कैसे करें
मैं प्रोजेक्ट साइट पर नमूना कोड का उपयोग करने और इसे कई बार बाधाओं को खोजने का प्रयास कर रहा हूं, इसे ईमानदारी से पुन: पेश करने का प्रयास करने के बावजूद। मैं इस एपीआई को गलत व्याख्या क्यों कर रहा हूं? क्या डेमो कोड लिखा गया था जब एपीआई स्थानांतरित हो गया है? क्या मुझे रेडक्स ज्ञान के कुछ महत्वपूर्ण और स्पष्ट टुकड़े याद आ रहे हैं?
समस्या 1: हैंडल के लिए हस्ताक्षर सबमिट विधि handleSubmit(data)
होना चाहिए। लेकिन हैंडल स्वीट वर्तमान में सबमिट कार्रवाई से केवल प्रतिक्रिया सिंथेटिक इवेंट प्राप्त कर रहा है, और कोई डेटा नहीं है। (वास्तव में, उदाहरण के रूप में लिखित उदाहरण का उपयोग दो अलग-अलग घटनाओं को भेज रहा था, प्रतीत होता है कि प्रपत्र पर onSubmit
कार्रवाई और onClick
बटन पर कार्रवाई की गई थी।) वह डेटा कहां से आ रहा है, और मैं क्यों विफल रहा हूं इसे हैंडलर को पास करें?
समस्या 2: एक महत्वपूर्ण fields
ऑब्जेक्ट है जिसे फ़ॉर्म पैरेंट पर परिभाषित किया जाना चाहिए और आपके फॉर्म के प्रोप के रूप में आपूर्ति की जानी चाहिए। दुर्भाग्यवश, उस fields
ऑब्जेक्ट का आकार दस्तावेज़ों में और न ही इसका उद्देश्य, वास्तव में समझाया गया है। क्या यह अनिवार्य रूप से प्रारंभिक 'राज्य' वस्तु है? त्रुटियों के लिए रनटाइम पर उपयोग करने के लिए Redux-form के लिए एक साधारण ऑब्जेक्ट कंटेनर इत्यादि? connectReduxForm
में फ़ील्ड नामों पर fields
पर प्रोप से मेल करके त्रुटि को रोकने के लिए मुझे यह मिल गया है, लेकिन क्योंकि डेटा बाध्यकारी नहीं है, मुझे लगता है कि यह सही आकार नहीं है।
समस्या 3: खेतों ऑटो बाध्य onBlur
और onChange
के लिए संचालकों को हो सकता है, इतना है कि वे दुकान उचित रूप से अद्यतन अपेक्षा की जाती है। ऐसा कभी नहीं हो रहा है। (जो हम Redux देव-उपकरण के लिए धन्यवाद देख सकते हैं हालांकि, handleSubmit
सफलतापूर्वक initialize
कार्रवाई है, जो दुकान, कम करने का सुझाव देते हैं, और अन्य बुनियादी पाइपलाइन सभी काम कर रहे हैं भेजने रहा है।।)
समस्या 4: validateContact
है एक बार init पर फायरिंग, लेकिन फिर कभी नहीं।
यह दुर्भाग्य से एक साधारण पहेली के लिए बहुत जटिल है, लेकिन संपूर्ण रेपो (यह केवल मूल ReduxStarterApp है, साथ ही यह फॉर्म पीओसी) is available here।
import React from 'react';
import { connect } from 'react-redux';
import {initialize} from 'redux-form';
import ContactForm from '../components/simple-form/SimpleForm.js';
const mapStateToProps = (state) => ({
counter : state.counter
});
export class HomeView extends React.Component {
static propTypes = {
dispatch : React.PropTypes.func.isRequired,
counter : React.PropTypes.number
}
constructor() {
super();
}
handleSubmit(event, data) {
event.preventDefault();
console.log(event); // this should be the data, but is an event
console.log(data); // no data here, either...
console.log('Submission received!', data);
this.props.dispatch(initialize('contact', {})); // clear form: THIS works
return false;
}
_increment() {
this.props.dispatch({ type : 'COUNTER_INCREMENT' });
}
render() {
const fields = {
name: '',
address: '',
phone: ''
};
return (
<div className='container text-center'>
<h1>Welcome to the React Redux Starter Kit</h1>
<h2>Sample Counter: {this.props.counter}</h2>
<button className='btn btn-default'
onClick={::this._increment}>
Increment
</button>
<ContactForm handleSubmit={this.handleSubmit.bind(this)} fields={fields} />
</div>
);
}
}
export default connect(mapStateToProps)(HomeView);
और आंतरिक रूप घटक:
और, यहां बाहरी घटक है,
import React, {Component, PropTypes} from 'react';
import {connectReduxForm} from 'redux-form';
function validateContact(data) {
console.log("validating");
console.log(data);
const errors = {};
if (!data.name) {
errors.name = 'Required';
}
if (data.address && data.address.length > 50) {
errors.address = 'Must be fewer than 50 characters';
}
if (!data.phone) {
errors.phone = 'Required';
} else if (!/\d{3}-\d{3}-\d{4}/.test(data.phone)) {
errors.phone = 'Phone must match the form "999-999-9999"';
}
return errors;
}
class ContactForm extends Component {
static propTypes = {
fields: PropTypes.object.isRequired,
handleSubmit: PropTypes.func.isRequired
}
render() {
const { fields: {name, address, phone}, handleSubmit } = this.props;
return (
<form onSubmit={handleSubmit}>
<label>Name</label>
<input type="text" {...name}/> {/* will pass value, onBlur and onChange */}
{name.error && name.touched && <div>{name.error}</div>}
<label>Address</label>
<input type="text" {...address}/> {/* will pass value, onBlur and onChange*/}
{address.error && address.touched && <div>{address.error}</div>}
<label>Phone</label>
<input type="text" {...phone}/> {/* will pass value, onBlur and onChange */}
{phone.error && phone.touched && <div>{phone.error}</div>}
<button type='submit'>Submit</button>
</form>
);
}
}
// apply connectReduxForm() and include synchronous validation
ContactForm = connectReduxForm({
form: 'contact', // the name of your form and the key to
// where your form's state will be mounted
fields: ['name', 'address', 'phone'], // a list of all your fields in your form
validate: validateContact // a synchronous validation function
})(ContactForm);
// export the wrapped component
export default ContactForm;
इस विस्तृत प्रश्न के लिए धन्यवाद! मुझे एक ही समस्या थी और मुझे रेडक्स-फॉर्म प्रलेखन और उदाहरण जटिल और अधूरे उदाहरण मिलते हैं। आपके और @ जॉनी बुकानन की सहायता से मैं आगे बढ़ने में सक्षम था (हालांकि मेरे पास एक जटिल डेटा-संरचना है और मैं अभी तक समाप्त नहीं हुआ हूं)। [Redux devtools एक्सटेंशन] जोड़ना (https://github.com/zalmoxisus/redux-devtools-extension) ने डिबगिंग के साथ बहुत मदद की! –