해결책 하나의 mapPropsToHandler 및 event.target.
함수는 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를 모두 결합했습니다. 숫자 나 문자열이 아닌 핸들러에만 함수를 첨부하는 것이 좋습니다. 숫자와 문자열은 다음과 같은 DOM 속성의 도움으로 전달 될 수 있습니다.
<select data-id={id}/>
mapPropsToHandler보다는
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>
)
}
솔루션 2입니다. 이벤트 위임
솔루션 1을 참조하십시오. 입력에서 이벤트 핸들러를 제거하고 다른 입력도 보유하는 상위에 놓을 수 있으며 도움말 위임 기술을 통해 event.traget 및 mapPropsToHandler 함수를 다시 사용할 수 있습니다.