{"componentChunkName":"component---src-templates-docs-js","path":"/docs/typechecking-with-proptypes.html","result":{"data":{"markdownRemark":{"html":"<div class=\"scary\">\n<blockquote>\n<p>Estos documentos son antiguos y no se actualizarán. Vaya a <a href=\"https://es.react.dev/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">react.dev</a> para ver los nuevos documentos de React.</p>\n<p>PropTypes no se usan comúnmente en React moderno. Use TypeScript para la verificación de tipos estáticos.</p>\n</blockquote>\n</div>\n<blockquote>\n<p>Nota:</p>\n<p><code class=\"gatsby-code-text\">React.PropTypes</code> se movió a un paquete diferente desde React v15.5. Por favor usa <a href=\"https://www.npmjs.com/package/prop-types\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">en su lugar la biblioteca <code class=\"gatsby-code-text\">prop-types</code></a>.</p>\n<p>Nosotros ofrecemos <a href=\"/blog/2017/04/07/react-v15.5.0.html#migrating-from-reactproptypes\">un script de codemod</a> para automatizar la conversión.</p>\n</blockquote>\n<p>A medida que tu aplicación crece, puedes capturar una gran cantidad de errores con verificación de tipos. Para algunas aplicaciones, puedes usar extensiones de Javascript como <a href=\"https://flow.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Flow</a> o <a href=\"https://www.typescriptlang.org/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">TypeScript</a> para verificar los tipos en tu aplicación. Pero incluso si no usas alguno de ellos, React tiene algunas habilidades de verificación de tipos incorporadas. Para usar verificación de tipos en las props de un componente, puedes asignar la propiedad especial <code class=\"gatsby-code-text\">PropTypes</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span> <span class=\"token string\">'prop-types'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">Greeting</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h1</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Hello, </span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h1</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\nGreeting<span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>string\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>En este ejemplo, estamos usando un componente de clase, pero la misma funcionalidad también se podría aplicar a componentes de función, o componentes creados por <a href=\"/docs/react-api.html#reactmemo\"><code class=\"gatsby-code-text\">React.memo</code></a> o <a href=\"/docs/react-api.html#reactforwardref\"><code class=\"gatsby-code-text\">React.forwardRef</code></a>.</p>\n<p><code class=\"gatsby-code-text\">PropTypes</code> exporta un rango de validadores que pueden ser usados para estar seguros que la información recibida sea válida. En este ejemplo, usamos <code class=\"gatsby-code-text\">PropTypes.string</code>. Cuando un valor inválido se asigna a una prop, se muestra una advertencia en la consola de Javascript. Por razones de desempeño, <code class=\"gatsby-code-text\">PropTypes</code> solo se verifica en modo desarrollo.</p>\n<h3 id=\"proptypes\"><a href=\"#proptypes\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>PropTypes </h3>\n<p>Aquí hay un ejemplo que documenta los diferentes tipos de validadores:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span> <span class=\"token string\">'prop-types'</span><span class=\"token punctuation\">;</span>\n\nMyComponent<span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// Puedes declarar que una propiedad es un tipo específico de JS. Por defecto, estas</span>\n  <span class=\"token comment\">// son todas opcionales.</span>\n  <span class=\"token literal-property property\">optionalArray</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>array<span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">optionalBool</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>bool<span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">optionalFunc</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>func<span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">optionalNumber</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">optionalObject</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>object<span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">optionalString</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">optionalSymbol</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>symbol<span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// Cualquier cosa que sea interpretada: números, cadenas, elementos o un array</span>\n  <span class=\"token comment\">// (o fragment) que contengan estos tipos.</span>\n  <span class=\"token literal-property property\">optionalNode</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>node<span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// Un elemento de React</span>\n  <span class=\"token literal-property property\">optionalElement</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>element<span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// Un tipo de elemento React (ej. MyComponent).</span>\n  <span class=\"token literal-property property\">optionalElementType</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>elementType<span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// Además puedes declarar que una prop es una instancia de una clase. Este usa</span>\n  <span class=\"token comment\">// el operador instanceof de JS.</span>\n  <span class=\"token literal-property property\">optionalMessage</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">instanceOf</span><span class=\"token punctuation\">(</span>Message<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// Puedes asegurar que una prop esta limitada a valores específicos si se</span>\n  <span class=\"token comment\">// considera como enum.</span>\n  <span class=\"token literal-property property\">optionalEnum</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">oneOf</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token string\">'News'</span><span class=\"token punctuation\">,</span> <span class=\"token string\">'Photos'</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// Un objeto que puede ser de diferentes tipos</span>\n  <span class=\"token literal-property property\">optionalUnion</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">oneOfType</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span>\n    PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>\n    PropTypes<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">,</span>\n    PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">instanceOf</span><span class=\"token punctuation\">(</span>Message<span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// Un array de determinado tipo</span>\n  <span class=\"token literal-property property\">optionalArrayOf</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">arrayOf</span><span class=\"token punctuation\">(</span>PropTypes<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// Un objeto con valores de propiedad de determinado tipo</span>\n  <span class=\"token literal-property property\">optionalObjectOf</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">objectOf</span><span class=\"token punctuation\">(</span>PropTypes<span class=\"token punctuation\">.</span>number<span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// Un objeto que tenga determinada estructura</span>\n  <span class=\"token literal-property property\">optionalObjectWithShape</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">shape</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">color</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">fontSize</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>number\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n  \n  <span class=\"token comment\">// Un objeto con advertencias sobre propiedades adicionales</span>\n  <span class=\"token literal-property property\">optionalObjectWithStrictShape</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">exact</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>string<span class=\"token punctuation\">,</span>\n    <span class=\"token literal-property property\">quantity</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>number\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>   \n\n  <span class=\"token comment\">// Puedes encadenar cualquiera de los anteriores con `isRequired` para asegurar</span>\n  <span class=\"token comment\">// que se muestre una advertencia si la prop no se suministra.</span>\n  <span class=\"token literal-property property\">requiredFunc</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>func<span class=\"token punctuation\">.</span>isRequired<span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// Un valor requerido de cualquier tipo de datos</span>\n  <span class=\"token literal-property property\">requiredAny</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>any<span class=\"token punctuation\">.</span>isRequired<span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// También puedes suministrar un validador personalizado. Debe retornar un objeto Error</span>\n  <span class=\"token comment\">// si la validación falla. No uses `console.warn` o throw, porque no va a funcionar en</span>\n  <span class=\"token comment\">// `oneOfType`</span>\n  <span class=\"token function-variable function\">customProp</span><span class=\"token operator\">:</span> <span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">props<span class=\"token punctuation\">,</span> propName<span class=\"token punctuation\">,</span> componentName</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token regex\"><span class=\"token regex-delimiter\">/</span><span class=\"token regex-source language-regex\">matchme</span><span class=\"token regex-delimiter\">/</span></span><span class=\"token punctuation\">.</span><span class=\"token function\">test</span><span class=\"token punctuation\">(</span>props<span class=\"token punctuation\">[</span>propName<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Error</span><span class=\"token punctuation\">(</span>\n        <span class=\"token string\">'Invalid prop `'</span> <span class=\"token operator\">+</span> propName <span class=\"token operator\">+</span> <span class=\"token string\">'` supplied to'</span> <span class=\"token operator\">+</span>\n        <span class=\"token string\">' `'</span> <span class=\"token operator\">+</span> componentName <span class=\"token operator\">+</span> <span class=\"token string\">'`. Validation failed.'</span>\n      <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n\n  <span class=\"token comment\">// También puedes suministrar un validador personalizado a `arrayOf` y `objectOf`.</span>\n  <span class=\"token comment\">// Debe retornar un objeto Error si la validación falla. El validador se llamará</span>\n  <span class=\"token comment\">// por cada key en el array o el objeto. Los primeros dos arguments del validador</span>\n  <span class=\"token comment\">// son el array o el objeto, y la key del elemento actual.</span>\n  <span class=\"token literal-property property\">customArrayProp</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span><span class=\"token function\">arrayOf</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">function</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">propValue<span class=\"token punctuation\">,</span> key<span class=\"token punctuation\">,</span> componentName<span class=\"token punctuation\">,</span> location<span class=\"token punctuation\">,</span> propFullName</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token operator\">!</span><span class=\"token regex\"><span class=\"token regex-delimiter\">/</span><span class=\"token regex-source language-regex\">matchme</span><span class=\"token regex-delimiter\">/</span></span><span class=\"token punctuation\">.</span><span class=\"token function\">test</span><span class=\"token punctuation\">(</span>propValue<span class=\"token punctuation\">[</span>key<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">return</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Error</span><span class=\"token punctuation\">(</span>\n        <span class=\"token string\">'Invalid prop `'</span> <span class=\"token operator\">+</span> propFullName <span class=\"token operator\">+</span> <span class=\"token string\">'` supplied to'</span> <span class=\"token operator\">+</span>\n        <span class=\"token string\">' `'</span> <span class=\"token operator\">+</span> componentName <span class=\"token operator\">+</span> <span class=\"token string\">'`. Validation failed.'</span>\n      <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"requiring-single-child\"><a href=\"#requiring-single-child\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Solicitar un sólo hijo </h3>\n<p>Usando <code class=\"gatsby-code-text\">PropTypes.element</code> puedes especificar que únicamente un hijo se pase al componente.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span> <span class=\"token string\">'prop-types'</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">MyComponent</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// Debe ser exactamente un elemento o generará una advertencia</span>\n    <span class=\"token keyword\">const</span> children <span class=\"token operator\">=</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>children<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">\n        </span><span class=\"token punctuation\">{</span>children<span class=\"token punctuation\">}</span><span class=\"token plain-text\">\n      </span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\nMyComponent<span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token literal-property property\">children</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>element<span class=\"token punctuation\">.</span>isRequired\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"default-prop-values\"><a href=\"#default-prop-values\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Valores por defecto de props </h3>\n<p>Puedes definir los valores por defecto de tus props al asignar la propiedad especial <code class=\"gatsby-code-text\">defaultProps</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Greeting</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h1</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Hello, </span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h1</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token comment\">// Especifica los valores por defecto de props:</span>\nGreeting<span class=\"token punctuation\">.</span>defaultProps <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'Stranger'</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token comment\">// Renderiza \"Hello, Stranger\":</span>\n<span class=\"token keyword\">const</span> root <span class=\"token operator\">=</span> ReactDOM<span class=\"token punctuation\">.</span><span class=\"token function\">createRoot</span><span class=\"token punctuation\">(</span>document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'example'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> \nroot<span class=\"token punctuation\">.</span><span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span><span class=\"token class-name\">Greeting</span></span> <span class=\"token punctuation\">/></span></span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Desde ES2022 puedes declarar también <code class=\"gatsby-code-text\">defaultProps</code> como una propiedad estática al interior de un componente clase de React. Para más información, puedes ver los <a href=\"https://developer.mozilla.org/es/docs/Web/JavaScript/Reference/Classes/Public_class_fields#campos_p%C3%BAblicos_est%C3%A1ticos\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">campos públicos estáticos de clase</a>. Esta sintaxis requerirá un paso de compilación para funcionar en navegadores antiguos.</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">class</span> <span class=\"token class-name\">Greeting</span> <span class=\"token keyword\">extends</span> <span class=\"token class-name\">React<span class=\"token punctuation\">.</span>Component</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">static</span> defaultProps <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> <span class=\"token string\">'stranger'</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token function\">render</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Hello, </span><span class=\"token punctuation\">{</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>props<span class=\"token punctuation\">.</span>name<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token punctuation\">)</span>\n  <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p><code class=\"gatsby-code-text\">defaultProps</code> se usa para asegurar que <code class=\"gatsby-code-text\">this.props.name</code> tendrá un valor si no fue especificado por el componente padre. La verificación de tipo de <code class=\"gatsby-code-text\">propTypes</code> sucede después de resolver <code class=\"gatsby-code-text\">defaultProps</code>, así que la verificación de tipo también se aplica a <code class=\"gatsby-code-text\">defaultProps</code>.</p>\n<h3 id=\"function-components\"><a href=\"#function-components\" aria-hidden class=\"anchor\"><svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Componentes de función </h3>\n<p>Si estás usando componentes de función en tu flujo común de desarrollo, es conveniente que hagas algunos cambios para permitir que los PropTypes se apliquen correctamente.</p>\n<p>Digamos que tienes un componentes que luce así:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token keyword\">function</span> <span class=\"token function\">HelloWorldComponent</span><span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> name <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Hello, </span><span class=\"token punctuation\">{</span>name<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Para añadir PropTypes, se puede declarar el componente en una función independiente antes de exportarlo, de esta forma:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">function</span> <span class=\"token function\">HelloWorldComponent</span><span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> name <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Hello, </span><span class=\"token punctuation\">{</span>name<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> HelloWorldComponent</code></pre></div>\n<p>Luego, puedes añadir PropTypes directamente al componente <code class=\"gatsby-code-text\">HelloWorldComponent</code>:</p>\n<div class=\"gatsby-highlight\" data-language=\"jsx\"><pre class=\"gatsby-code-jsx\"><code class=\"gatsby-code-jsx\"><span class=\"token keyword\">import</span> PropTypes <span class=\"token keyword\">from</span> <span class=\"token string\">'prop-types'</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">HelloWorldComponent</span><span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token punctuation\">{</span> name <span class=\"token punctuation\">}</span></span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">return</span> <span class=\"token punctuation\">(</span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span><span class=\"token punctuation\">></span></span><span class=\"token plain-text\">Hello, </span><span class=\"token punctuation\">{</span>name<span class=\"token punctuation\">}</span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token punctuation\">)</span>\n<span class=\"token punctuation\">}</span>\n\nHelloWorldComponent<span class=\"token punctuation\">.</span>propTypes <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token literal-property property\">name</span><span class=\"token operator\">:</span> PropTypes<span class=\"token punctuation\">.</span>string\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> HelloWorldComponent</code></pre></div>","frontmatter":{"title":"Verificación de tipos con PropTypes","next":null,"prev":null},"fields":{"path":"content/docs/typechecking-with-proptypes.md","slug":"docs/typechecking-with-proptypes.html"}}},"pageContext":{"slug":"docs/typechecking-with-proptypes.html"}},"staticQueryHashes":[]}