3
静的propTypeで必要な文字列値として設定したいmatch> paramsオブジェクトに、Reactルータから渡された小道具を持っています。 photo:PropTypes.string.isRequiredと設定するとエラーが発生します。React Router 4でPropTypes isRequired params prop
Warning: Failed prop type: The prop `photo` is marked as required in `BlogEntry`, but its value is `undefined`.
私がルータの小道具を経由して来るもののログを見ると、私は写真が文字列idであることがわかります。
const {match:{params:{photo}}} = this.props;
console.log("photo = ", photo);
// result:
photo = 5a03c474e1bbc026de896aa8
写真に必要なタイプのバリデーションはありますか?
これは私の設定です。
import React, {Component} from 'react';
import {connect} from 'react-redux';
import PropTypes from 'prop-types';
import {fetchBlogEntry} from '../../actions/index';
import BlogPost from '../../components/client/blog-post';
class BlogEntry extends Component{
constructor(props){
super(props);
console.log('constructor = ', this.props.match.params.photo);
}
static propTypes={
entry: PropTypes.object.isRequired,
photo: PropTypes.string.isRequired
}
componentWillMount(){
const {match:{params:{photo}}} = this.props;
console.log("photo = ", photo);
this.props.fetchBlogEntry(photo);
}
render(){
const {entry} = this.props;
return(
<div id='blog' className='container'>
<BlogPost {...entry}/>
</div>
)
}
}
function mapStateToProps({blog:{entry}}){
return{
entry
}
}
export default connect(({blog:{entry}}) => ({entry}), {fetchBlogEntry})(BlogEntry);
優れたおかげ。あなたはシェイプを少し説明してくれるでしょうか? "特定の形を取るオブジェクト"。入れ子にされたオブジェクトにシェイプを使用することとは別に、それは何を意味するのか、正確に行うのかまたは、それだけです(ネストされた小道具の検証を許可します) –
他の誰かがあなたのコードを試しても少し修正します。名前:Proptypes.string.isRequiredは名前である必要があります:PropTypes.string.isRequired。 PropTypeの資本T –
Shapeを使うと、オブジェクトのフィールドを記述することができます。だから、それがオブジェクトだと言っているのではなく、このように見えるオブジェクトを言うことができます。 'objectOf'のようにオブジェクトを記述するための他のpropタイプもありますが、記述的ではありません。また、私の例を修正しました。 – Dakota