2017-10-09 74 views
0

沒有特別的邀請,我使用了React文檔here,旨在發揮defaultProps的想法。我有TypeError,我無法理解!使用defaultProptypes和propTypes進行反應檢查,使用undefined prop

import React, {PropTypes} from 'react'; 
import ReactDOM from 'react-dom'; 



class Greeting extends React.Component { 
    render() { 
    return (
     <h1>Hello, {this.props.name}</h1> 
    ); 
    } 
} 

Greeting.defaultProps = { 
    name: 'Stranger' 
}; 

Greeting.propTypes = { 
    name: PropTypes.string, 
}; 

ReactDOM.render(<Greeting/>, document.getElementById('root')); 

結果:

Uncaught TypeError: Cannot read property 'string' of undefined 

指着(以源):

name: _react.PropTypes.string 

正如你在文檔閱讀:
的propTypes類型檢查發生defaultProps都解決了之後,那麼類型檢查也將適用於defaultProps。

如果我刪除:

Greeting.propTypes = { 
    name: PropTypes.string, //.isRequired 
}; 

不會有任何類型錯誤!
請問,如果我沒有明確提供一個具有默認值的道具(這就是爲什麼存在默認值),我該如何理解這一點,並且同時擁有propTypes和defaultProps而沒有得到TypeError?

回答

2

該錯誤告訴您PropTypes未定義,這意味着您正在導入的內容存在問題。你應該從prop-types導入PropTypes

import PropTypes from 'prop-types'; 

https://reactjs.org/docs/typechecking-with-proptypes.html

+0

感謝。我導入它,但是作爲「導入反應」,「反應」中的{PropTypes};「 –

+1

和有趣的是,我正在練習的視頻教程沒有更新,只有你的答案回憶我更新,沒有更多的地方,我從進口! –