2017-07-30 87 views
4

在React中,我編寫了一個無狀態功能組件,現在想要爲其添加Prop類型驗證。反應:無狀態功能組件中的PropType

List組件:

import React from 'react'; 
import PropTypes from 'prop-types'; 

function List(props) { 
    const todos = props.todos.map((todo, index) => (<li key={index}>{todo}</li>)); 
    return (<ul></ul>); 
} 

List.PropTypes = { 
    todos: PropTypes.array.isRequired, 
}; 

export default List; 

App組件,渲染List

import React from 'react'; 
import List from './List'; 

class App extends React.Component { 
    constructor() { 
    super(); 
    this.state = { 
     todos: '', 
    }; 
    } 

    render() { 
    return (<List todos={this.state.todos} />); 
    } 
} 

export default App; 

正如你可以看到App,我傳遞給this.state.todosList。由於this.state.todos是一個字符串,因此我期望使用Prop Type驗證。相反,在瀏覽器控制檯中出現錯誤,因爲字符串沒有名爲map的方法。

爲什麼Prop Type驗證不能按預期工作?羚牛看一下this question,案件看起來一樣。

回答

13

你應該改變

List.PropTypes = { 
    todos: PropTypes.array.isRequired, 
}; 

List.propTypes = { 
    todos: PropTypes.array.isRequired, 
}; 
+0

快速,方便,謝謝!我只是忽略了那個,哦。 – Sven

+1

要說明這種骯髒的錯誤,你可以使用https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/no-typos.md –