dmo*_*oly 14 javascript modularity reactjs
我喜欢为每个班级明确指定我所有的道具类型.
React.createClass({
propTypes: {
optionalArray: React.PropTypes.array,
optionalBool: React.PropTypes.bool,
...
Run Code Online (Sandbox Code Playgroud)
这是从阅读可重用的组件:https://facebook.github.io/react/docs/reusable-components.html
但是,如果我在很多类中使用了一个非常常见的对象,该怎么办?例如:
var MemoryForm = React.createClass({
propTypes: {
memory: React.PropTypes.shape({
memoryID: React.PropTypes.number,
content: React.PropTypes.string,
date: React.PropTypes.object,
dateStr: React.PropTypes.string,
note: React.PropTypes.string
}).isRequired,
...
var MemoriesArea = React.createClass({
propTypes: {
// The initial memory to fill the memory form with.
formMemory: React.PropTypes.shape({ // <== shape used again
memoryID: React.PropTypes.number,
content: React.PropTypes.string,
date: React.PropTypes.object,
dateStr: React.PropTypes.string,
note: React.PropTypes.string
}).isRequired,
// ...
var Playground = React.createClass({
getInitialState: function() {
var initVars = {
// The initial memory to fill the memory form with.
formMemory: { // <== shape is used again.
memoryID: 0,
content: "",
date: null,
dateStr: "",
note: ""
}
};
return initVars;
}
//...
Run Code Online (Sandbox Code Playgroud)
在这里,我在各种类的prop类型中以及在一些初始化中经常使用"memory"形状.如何使这更干燥 - 即减少代码重复,这样对象形状的变化将来会更加可维护?
And*_*ous 23
我有同样的问题,只是将值移动到一个单独的ES6模块.在你的例子中:
// File lib/PropTypeValues.js
import { PropTypes } from 'react';
export let MemoryPropTypes = PropTypes.shape({
memoryID: PropTypes.number,
content: PropTypes.string,
date: PropTypes.object,
dateStr: PropTypes.string,
note: PropTypes.string
}).isRequired
Run Code Online (Sandbox Code Playgroud)
然后在您的客户端代码中:
// MemoryForm.jsx
import { MemoryPropTypes } from './lib/PropTypeValues'
import React from 'react';
class MemoryForm extends React.Component {
static propTypes: {
memory: MemoryPropTypes,
// ...
};
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
我会制作一个小模块来公开该功能。在 CommonJS 世界中它看起来像这样:
let React = require('react');
module.exports = {
propTypes() {
return React.PropTypes.shape({
memoryID: React.PropTypes.number,
content: React.PropTypes.string,
date: React.PropTypes.object,
dateStr: React.PropTypes.string,
note: React.PropTypes.string
}).isRequired;
},
initialValues() {
return {
memoryID: 0,
content: "",
date: null,
dateStr: "",
note: ""
};
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以在像这样的组件中使用它:
let memoryUtils = require('./memory-utils');
let MyComponent = React.createClass({
propTypes: memoryUtils.propTypes(),
render() {
...
}
});
Run Code Online (Sandbox Code Playgroud)
和:
let memoryUtils = require('./memory-utils');
let MyComponent = React.createClass({
getInitialState() {
return memoryUtils.initialValues();
},
render() {
...
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6494 次 |
| 最近记录: |