समाधान एक मैपप्रॉप्सटॉन्डलर और ईवेंट। टारगेट।
कार्य js में ऑब्जेक्ट हैं इसलिए उन्हें गुण संलग्न करना संभव है।
function onChange() { console.log(onChange.list) }
function Input(props) {
onChange.list = props.list;
return <input onChange={onChange}/>
}
यह फ़ंक्शन केवल एक बार किसी फ़ंक्शन के लिए एक गुण बाँधता है।
export function mapPropsToHandler(handler, props) {
for (let property in props) {
if (props.hasOwnProperty(property)) {
if(!handler.hasOwnProperty(property)) {
handler[property] = props[property];
}
}
}
}
मैं अपने प्रॉप्स ऐसे ही प्राप्त करता हूं।
export function InputCell({query_name, search, loader}) {
mapPropsToHandler(onChange, {list, query_name, search, loader});
return (
<input onChange={onChange}/>
);
}
function onChange() {
let {query_name, search, loader} = onChange;
console.log(search)
}
इस उदाहरण ने दोनों event.target और mapPropsToHandler को संयोजित किया। संचालकों को केवल संख्या या तार नहीं करने के लिए फ़ंक्शंस संलग्न करना बेहतर है। डोम विशेषता की मदद से संख्या और तारों को पास किया जा सकता है
<select data-id={id}/>
बजाय मैपप्रॉप्सटहैंडलर के बजाय
import React, {PropTypes} from "react";
import swagger from "../../../swagger/index";
import {sync} from "../../../functions/sync";
import {getToken} from "../../../redux/helpers";
import {mapPropsToHandler} from "../../../functions/mapPropsToHandler";
function edit(event) {
let {translator} = edit;
const id = event.target.attributes.getNamedItem('data-id').value;
sync(function*() {
yield (new swagger.BillingApi())
.billingListStatusIdPut(id, getToken(), {
payloadData: {"admin_status": translator(event.target.value)}
});
});
}
export default function ChangeBillingStatus({translator, status, id}) {
mapPropsToHandler(edit, {translator});
return (
<select key={Math.random()} className="form-control input-sm" name="status" defaultValue={status}
onChange={edit} data-id={id}>
<option data-tokens="accepted" value="accepted">{translator('accepted')}</option>
<option data-tokens="pending" value="pending">{translator('pending')}</option>
<option data-tokens="rejected" value="rejected">{translator('rejected')}</option>
</select>
)
}
समाधान दो। ईवेंट प्रतिनिधिमंडल
समाधान एक देखें। हम ईवेंट हैंडलर को इनपुट से हटा सकते हैं और इसे उसके अभिभावक के पास रख सकते हैं जो अन्य इनपुट भी रखता है और डेलिगेशन तकनीक की मदद से हम ईवेंट.टैगेट और मैपप्रॉप्सटहैंडलर फ़ंक्शन का फिर से उपयोग कर सकते हैं।