React.CreateClass로 작성된 샘플을 React.Component를 확장하도록 변환하려고하지만 이벤트 핸들러가 상태를 가져 오지 않고 실패합니다. 누군가 내가 잘못하고있는 것에 대해 밝힐 수 있습니까?React.CreateClass를 React.Component로 변환하려고 시도합니다.
근무 샘플 :
var Form4 = React.createClass({
getInitialState: function() {
return {
username: '',
password: ''
}
},
handleChange: function (key) {
return function (e) {
var state = {};
state[key] = e.target.value;
this.setState(state);
}.bind(this);
},
resetForm: function() {
this.setState({username:'', password: ''});
},
changeFunkyShizzle: function() {
this.setState({
username: 'Tom',
password: 'Secret'
});
},
updateToServer(e) {
console.log('update to server....');
console.log(this.state);
e.preventDefault();
},
render: function(){
console.log(JSON.stringify(this.state, null, 4));
return (
<div>
<FormFields unamepwd={this.state} handleChange={this.handleChange} updateChanges={this.updateToServer} />
<pre>{JSON.stringify(this.state, null, 4)}</pre>
<button onClick={this.changeFunkyShizzle}>Change is near...</button>
<button onClick={this.resetForm}>Reset all the things!</button>
</div>
);
}
});
나는 그것에서 만들려고하는 것 :
class Form5 extends React.Component {
constructor() {
super();
this.state = {
username: '',
password: ''
};
}
handleChange(key) {
return function (e) {
var state = {};
state[key] = e.target.value;
this.setState(state);
}.bind(this);
}
changeFunkyShizzle() {
this.setState({
username: 'Tom',
password: 'Secret'
});
}
render() {
let self = this;
console.log(JSON.stringify(this.state, null, 4));
return (
<div>
<FormFields unamepwd={this.state} handleChange={self.handleChange} updateChanges={self.updateToServer} />
<pre>{JSON.stringify(this.state, null, 4)}</pre>
<button onClick={this.changeFunkyShizzle}>Change is near...</button>
<button onClick={this.resetForm}>Reset all the things!</button>
</div>)
;
}
}
Formfields : 디버깅 할 때
var FormFields = React.createClass({
render: function() {
const upwd = this.props.unamepwd;
return(
<form>
Username: <input
value={upwd.username}
onChange={this.props.handleChange('username')} />
<br />
Password: <input type="password"
value={upwd.password}
onChange={this.props.handleChange('password')} />
<button onClick={this.props.updateChanges}>Go!</button>
</form>
);
}
});
나는 눈치 그 두 경우 모두에서 this
this.setState(state);
을에 완전히 다른 것입니다. Form5에서는 Form4에서만 상태를 제공하지만, 완전한 React 객체 인 경우 Form4에서 더 많이 볼 수 있습니다.
바벨이 그것을 다른 것으로 옮겨 놓거나 내가 확장하고있는 클래스 (React.Component) 때문일 수 있습니다. 나는 React.js 세계로 첫 걸음을 내딛었으며 벌써 꽤 많은 것들을 달리고있다. 그러나 이것은 나를 위해 일하지 않고 왜 그렇게 명확한 이유가 없는지 모른다.
내가 transpile에 사용하는 gulpfile은 :
클래스 메소드와var gulp = require('gulp');
var babel = require('gulp-babel');
var sourceMaps = require('gulp-sourcemaps');
gulp.task('transpile', function() {
gulp.src('source/**.jsx')
.pipe(sourceMaps.init())
.pipe(babel({ "presets": "react" }))
.pipe(babel({ "presets": "es2015" }))
.pipe(sourceMaps.write('.'))
.pipe(gulp.dest('app/'));
});
gulp.task('watchers', function() {
gulp.watch('source/**.jsx', ['transpile']);
});
gulp.task('default', ['watchers'], function() {
console.log('gulp default task running');
});
이 솔루션은 나를 위해 밖으로 작동 보인다. 그러나 해결책 2는 JSX가 허용하지 않는 것으로 받아 들여지지 않았습니다. – XIII
Oups, 중괄호 제거하는 것을 잊었습니다. 내 대답이 업데이트되었습니다. 또한 화살표 기능으로 Babel이 필요할 수도 있습니다. ES6에서만 사용할 수 있습니다. – mbernardeau
나는 그것을 나중에 시험해 볼 것이다. 나는 또한 속성으로 지시문을 통과시키지 만 succes는 필요 없다. http://stackoverflow.com/questions/41186015/react-js-passing-in-props. – XIII