私は1つの表現コンポーネント(ProjectFormUpdate)とそのコンテナ(ProjectFormUpdateContainer)を使っています。コンテナから、私はドキュメントオブジェクトProjectとフラグisLoadingを送信します。しかし、ProjectFormUpdateのConstructor()では、フラグはfalseです...状態は設定されません。私のisLoadingフラグはコンストラクタで真に設定されていません
表現componente
import React, { Component} from 'react';
import ReactDOM from 'react-dom';
import { Projects } from '/imports/api/projects.js';
import PropTypes from 'prop-types'; // ES6
import { withTracker } from 'meteor/react-meteor-data';
export default class ProjectFormUpdate extends Component {
handleUpdate(event) {
event.preventDefault();
console.log("se modificó el estadoooo")
this.setState({
codigo: ReactDOM.findDOMNode(this.refs.codigoInput).value.trim(),
nombre: ReactDOM.findDOMNode(this.refs.nombreInput).value.trim()
});
}
handleSubmit(event){
this.setState({
codigo: ReactDOM.findDOMNode(this.refs.codigoInput).value.trim(),
nombre: ReactDOM.findDOMNode(this.refs.nombreInput).value.trim()
});
}
constructor(props) {
super(props);
if (!props.isLoading){
this.state = {
codigo: props.oneProject.codigo,
nombre: props.oneProject.nombre}
}
else{
this.state = {
codigo: 'dd',
nombre: 'ff'}
}
}
render() {
const { oneProject, isLoading } = this.props;
if (!isLoading){
this.setState = {
codigo: this.props.oneProject.codigo,
nombre: this.props.oneProject.nombre}
return (
<div className="col-xs-11">
<div className="box box-solid">
<form className="form" onSubmit={this.handleSubmit.bind(this)} >
<div className="box-body">
<div className="row">
<div className="col-xs-2">
<input
className = "form-control input-sm"
type="text"
ref="codigoInput"
placeholder="Código del Proyecto"
value = {this.state.codigo}//this.state.codigo}
onChange = {this.handleUpdate.bind(this)}
/>
</div>
<div className="col-xs-6">
<input
className = "form-control input-sm"
type="text"
ref="nombreInput"
placeholder="Título"
value = {this.state.nombre }
onChange = {this.handleUpdate.bind(this)}
/>
</div>
</div>
</div>
<div className="box-footer">
<button type="submit" className="btn btn-sm btn-primary btn-flat">Guardar</button>
</div>
</form>
</div>
</div>
);
}
else {return (<div></div>);}
}}
ProjectFormUpdate.propTypes = {
// This component gets the task to display through a React prop.
// We can use propTypes to indicate it is required
oneProject: React.PropTypes.object,
isLoading: React.PropTypes.bool,
};
コンテナ
import { Meteor } from 'meteor/meteor';
import { withTracker } from 'meteor/react-meteor-data';
import { Projects } from '/imports/api/projects.js';
import ProjectFormUpdate from './ProjectFormUpdate.jsx';
export default ProjectFormUpdateContainer = withTracker(({ key1 }) => {
const sub = Meteor.subscribe('projects');
var oneProject = Projects.findOne(key1);
var isLoading = !sub.ready();
return {
oneProject,
isLoading,
};
})(ProjectFormUpdate);
そう...私は状態を設定することができないならば、私はコントロールさのように、フォームの値を設定することはできません。なにか提案を?
感謝を答えアルマン。あなたのコードは私をとても助けました。しかし、残念ながら私は状態を設定する解決策を見つけていない。コンストラクタ、またはcomponentWillMount()またはcomponentDidMount()でそれを行う場合、isLoadingが常にtrueになるため、設定されていない状態です。 – Reactib
こんにちは。私が助けることができて非常にうれしい。これは 'const sub = Meteor.subscribe( 'projects')'メソッドが '.ready()'に対して 'true'を返さないことを示唆しています。私はあなたが正しく議論を実装していることを確認します:[メテオのデータを流す](https://github.com/meteor/react-packages/tree/devel/packages/react-meteor-data)と[ Meteor.subscribe()](https://docs.meteor.com/api/pubsub.html#Meteor-subscribe)をクリックします。 '.onReady()'と '.onStop()'コールバック関数の出力用のコンソールログを設定すると便利です。ではごきげんよう! –