I like to explicitly specify all my prop types for every class.
React.createClass({
propTypes: {
optionalArray: React.PropTypes.array,
optionalBool
I would make a small module exposing that functionality. It would look something like this in a CommonJS world:
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: ""
};
}
}
Then you'd use that in components like this:
let memoryUtils = require('./memory-utils');
let MyComponent = React.createClass({
propTypes: memoryUtils.propTypes(),
render() {
...
}
});
And:
let memoryUtils = require('./memory-utils');
let MyComponent = React.createClass({
getInitialState() {
return memoryUtils.initialValues();
},
render() {
...
}
});
I had the same problem and just moved the values to a separate ES6 module. In your example:
// 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
Then in your client code:
// MemoryForm.jsx
import { MemoryPropTypes } from './lib/PropTypeValues'
import React from 'react';
class MemoryForm extends React.Component {
static propTypes: {
memory: MemoryPropTypes,
// ...
};
}
Hope this helps.