ReactJS: How can I have a more modular use of prop types & shapes for objects?

前端 未结 2 725
慢半拍i
慢半拍i 2020-12-31 04:17

I like to explicitly specify all my prop types for every class.

React.createClass({
  propTypes: {
    optionalArray: React.PropTypes.array,
    optionalBool         


        
相关标签:
2条回答
  • 2020-12-31 04:52

    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() {
        ...
      }
    });
    
    0 讨论(0)
  • 2020-12-31 04:55

    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.

    0 讨论(0)
提交回复
热议问题