2017-08-16 5 views
0

私は編集フォームの初期状態にpropsを渡す必要があります(私はフォームの値を状態と同じにしたいので)それを働かせる。最初のロード時にコンポーネントが空の小道具でロードするので、コンポーネントはinitialStateに小道具を与えません。これはcreateContainerのためだと思います。私は(componentDidMount、WillMount、WillReceiveProps ...)多くのことを試しましたが、うまく動作しませんでした。コードは、下の任意のアイデアを助ける?React/Meteor - 小道からのthis.stateが不定になる

import React from 'react'; 
import PropTypes from 'prop-types'; 
import { Meteor } from 'meteor/meteor'; 
import moment from 'moment'; 
import { createContainer } from 'meteor/react-meteor-data'; 

import { Blogposts } from './../api/blogposts'; 

export class BlogpostEditItem extends React.Component { 

constructor(props){ 
    super(props); 
    this.state = { 
     title: this.props.blogpost.title, 
     body: this.props.blogpost.body 
    } 
} 

handleBodyChange(e) { 
    const body = e.target.value; 
    this.setState({ body }); 
} 

handleTitleChange(e) { 
    const title = e.target.value; 
    this.setState({ title }); 
} 

onSubmit(e) { 
    e.preventDefault(); 
    this.props.call('blogposts.update', this.props.blogpost._id, this.state.title, this.state.body,); 
} 

renderEditForm() { 
    return(
     <div> 
      <input onChange={this.handleTitleChange.bind(this)} value={this.state.title} placeholder="Title" type="text"/> 
      <textarea onChange={this.handleBodyChange.bind(this)} value={this.state.body} placeholder="Body"></textarea> 
      <button onClick={this.onSubmit.bind(this)}>Submit Blogpost</button> 
     </div> 
    ) 
} 

render() { 
    return (
     <div> 
      { this.props.blogpost ? this.renderEditForm() : 'Pas de post' } 
     </div> 
    ); 
} 
} 

export default createContainer(({params}) => { 
    Meteor.subscribe('blogposts'); 

    return { 
     blogpost: Blogposts.findOne(params.id), 
     call: Meteor.call 
    } 
}, BlogpostEditItem) 

私はまたはdefaultValueとして小道具を渡し、値として状態を維持しようとしたが、それはフォームの両方を持ってすることはできません。どのようにして私の問題を解決することができますか? ありがとうございます。

答えて

1

あなたは、私が今、非常に恥ずかしいと感じることはありませthis.props

constructor(props){ 
 
    super(props); 
 
    this.state = { 
 
     title: props.blogpost.title, 
 
     body: props.blogpost.body 
 
    } 
 
}

+0

propsを通じてコン​​ポーネントpropsにアクセスすることができます:Dのおかげでたくさんの仲間! – Ivo

+0

@Ivo:あなたは答えとしてマークすることができれば素晴らしいでしょう:) –

+0

確かに、やった!再度、感謝します – Ivo

関連する問題