giải pháp một mapPropsToHandler và event.target.
các hàm là các đối tượng trong js nên có thể đính kèm các thuộc tính của chúng.
function onChange() { console.log(onChange.list) }
function Input(props) {
onChange.list = props.list;
return <input onChange={onChange}/>
}
chức năng này chỉ liên kết một thuộc tính với một chức năng.
export function mapPropsToHandler(handler, props) {
for (let property in props) {
if (props.hasOwnProperty(property)) {
if(!handler.hasOwnProperty(property)) {
handler[property] = props[property];
}
}
}
}
Tôi nhận được đạo cụ của mình giống như thế này.
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)
}
ví dụ này kết hợp cả event.target và mapPropsToHandler. tốt hơn hết là chỉ đính kèm các hàm vào trình xử lý chứ không phải số hoặc chuỗi. số và chuỗi có thể được chuyển với sự trợ giúp của thuộc tính DOM như
<select data-id={id}/>
chứ không phải 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>
)
}
giải pháp hai. đoàn sự kiện
xem giải pháp một. chúng ta có thể xóa trình xử lý sự kiện khỏi đầu vào và đặt nó cho cha mẹ của nó cũng chứa các đầu vào khác và bằng kỹ thuật ủy quyền trợ giúp, chúng ta có thể sử dụng lại hàm event.traget và mapPropsToHandler.