간단한 TODO 앱을 구현하여 반응적이고 기능적인 프로그래밍을 배우려고합니다. 나는 부모와 자식 사이에 정보를 전달하는 개념을 보려고 할 때만 유선을 사용하지 않습니다. 자식의 클릭 이벤트에서 부모 함수를 트리거하려고합니다. 그러나 React에서 순수한 함수와 상태를 사용하는 것에 대한 매우 불쾌한 오류가 발생합니다. 누군가 내가 뭘 잘못하고 있으며, 옳은 일을하는 방법을 설명 할 수 있습니까? 내 기능에 대해 불순한 점은 내가 만드는 부작용이 보이지 않는다. 여기 내 코드는 다음과 같습니다.반응, 순수한 기능 경고?
var React = require('react');
var Todo = require('./Todo');
const todos = [ {task: "Eat", completed: false},
{task: "Breathe", completed: false},
{task: "Sleep", completed: false}];
var TodoList = React.createClass({
getInitialState: function() {
return {todos: todos};
},
changeTodoStatus (task) {
var updatedTodos = this.state.todos.map(function(todo){
if (task.task === todo.task) {
return {task: todo.task, completed: !todo.completed};
} else {
return todo;
}
});
this.setState({todos: updatedTodos});
},
render: function() {
var _that = this;
return(
<div className="container">
<div className="row list-of-things">
<ul className="list-group">
{
this.state.todos.map((todo, index) => {
return (<Todo clickHandler={ this.changeTodoStatus } key={index} todo={todo} />);
})
}
</ul>
</div>
</div>
);
}
});
module.exports = TodoList;
var Todo = React.createClass({
handleClick(todo){
this.props.clickHandler(todo);
},
render: function() {
if(this.props.todo.completed === true){
return (<li onClick={ this.handleClick(this.props.todo.task) } className="list-group-item list-group-item-success"><strike>{this.props.todo.task}</strike></li>);
} else {
return (<li onClick={ this.handleClick(this.props.todo.task) } className="list-group-item"> {this.props.todo.task} </li>);
}
}
});
module.exports = Todo;
어떤 도움이나 명확한 점이 크게 감사드립니다!
다음 오류입니다. bundle.js : 9139 경고 : setState (...) : 기존 상태 전환 (예 : render
또는 다른 구성 요소의 생성자) 중에 업데이트 할 수 없습니다. 렌더링 방법은 소품과 국가의 순수한 기능이어야합니다. 생성자 부작용은 반 패턴이지만 componentWillMount
으로 이동할 수 있습니다.
아, 그게 참조하는 대신 부름 효과를 만들어 내고 있기 때문입니다. 맞습니까? – hackrnaut
처음에 어떻게 수행했는지 기본적으로 "렌더링하자 마자이 함수를 실행하십시오"라고 말합니다. 원하는 것은 괄호를 추가 할 때마다 "이 함수를 실행해야합니다."입니다. 함수의 실제 값을 원한다 aka 함수를 실행 vs 함수 자체를 참조 – finalfreq