React+Fluxを使っているが、Recordにデータチェックを追加したい衝動に駆られたので、Immutable.Recordを拡張してみた。
可変データのバリデーションとしてはまだ不十分だが、マスターデータなどのベースとしては使えるんじゃなかろうか(React+Flux初心者なのでおかしなことをやっているかもしれない)
Record.js
import PropTypes from 'prop-types';
import Immutable from 'immutable';
export function createRecordClass(scheme) {
const name = scheme.className;
const propTypes = scheme.propTypes;
const defaultProps = scheme.defaultProps || {};
let record = {};
for (let key in propTypes) {
record[key] = defaultProps[key];
}
return class extends Immutable.Record(record) {
constructor(data) {
PropTypes.checkPropTypes(propTypes, data, 'Record', name);
super(data);
}
}
}
HogeMasterRecord.js
import {createRecordClass} from './Record'
import PropTypes from 'prop-types';
const scheme = {
className: "Hoge",
propTypes: {
id: PropTypes.string.isRequired,
name: PropTypes.string.isRequired,
},
defaultProps: {
id: ''
}
};
export default class HogeMasterRecord extends createRecordClass(scheme) {
hoge() {
console.log("hoge");
}
}
Main.js
import HogeMasterRecord from './HogeMasterRecord'
// badkeyでwarningが表示される
let record new HogeMasterRecord({id: '123', badkey: ''};
record.hoge();
record.get('id');