Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ReactJS writing stateless function comments

What is the recommended way of writing comments for ReactJS stateless functions?

Let say I have the following code:

export const LoginForm = ({ submitting, handleSubmit }) => (
  <form onSubmit={handleSubmit(submit)}> ...(code)... </form>
));

How should documentation comment look like?

My first idea was:

/**
 * Form for user login
 * @param {bool} submitting Shows if form submitting is in progress
 * @param {function} handleSubmit Form submit callback function
 */

But this is not correct as submitting and handleSubmit are not real params of the LoginForm function. They are just keys of the props parameter. On the other hand documenting props as the parameter of LoginForm seems to be pointless because every react component has props as a parameter and the props keys are most important part of the function.

Are there any official guidelines? (I didn't find any)


EDIT

I have also PropTypes defined:

LoginForm.propTypes = {
  submitting: PropTypes.bool,
  handleSubmit: PropTypes.func.isRequired,
};

Maybe this is the place for props related documentation? If so how should it look like? Is there any standard for that?

like image 793
jmarceli Avatar asked Aug 02 '16 10:08

jmarceli


2 Answers

You can specify props object before property name:

/**
 * Form for user login
 * @param {object} props Component props
 * @param {bool} props.submitting Shows if form submitting is in progress
 * @param {function} props.handleSubmit Form submit callback function
 */
export const LoginForm = ({ submitting, handleSubmit }) => (
  <form onSubmit={handleSubmit(submit)}> ...(code)... </form>
));

For more info see @param wiki page in Parameters With Properties section.

like image 161
1ven Avatar answered Oct 04 '22 20:10

1ven


I know I am almost 3 years late to this party. Just adding for reference. One could do this:

/**
 * @typedef {Object<string, any>} Props
 * @property {boolean} submitting Shows if form submitting is in progress
 * @property {function} handleSubmit Form submit callback function
 */

/** 
 * Form for user login
 *
 * @type {import('react').FunctionComponentElement<Props>}
 */
export const LoginForm = ({ submitting, handleSubmit }) => (
    <form onSubmit={handleSubmit(submit)}> ...(code)... </form>
);

For brevity, one could also do:

/**
 * Form for user login
 *
 * @type {import('react').FunctionComponentElement<{
       submitting: boolean,
       handleSubmit: function
    }>}
 */
export const LoginForm = ({ submitting, handleSubmit }) => (
    <form onSubmit={handleSubmit(submit)}> ...(code)... </form>
);

If Typescript is enabled in your IDE, you could avoid declaring prop-types altogether with this setup.

like image 35
Stephen Isienyi Avatar answered Oct 04 '22 19:10

Stephen Isienyi