Roppongi.js #2
2018/5/29
※ Component は React, Vueでいうアレじゃなくて純粋に部品とかって意味
class TodoBloc {
private _todos = new BehaviorSubject<Todo[]>([]);
public get todos = this._todos.asObservable();
private _addTodo = new Subject<string>();
public get addTodo(): Observer<string> {
return _addTodo;
}
constructor() {
this._addTodo.subscribe(text => {
const current = this._todos.getValue();
this._todo.next([...current, { text, id: newId() }]);
})
}
}
const todoBloc = new TodoBloc();
class Todo extends React.Component {
this.state = {
todos: []
};
componentDidMount() {
todoBloc.todos.subscribe(todos => {
this.setState({ todos });
});
}
render() {
return (
<>
<TodoInput onAddTodo={todoBloc.addTodo.next} />
<TodoList todos={this.state.todos} />
</>
)
}
}
const todoBloc = new TodoBloc();
class Todo extends React.Component {
this.state = {
todos: []
};
componentDidMount() {
todoBloc.todos.subscribe(todos => {
this.setState({ todos });
});
}
render() {
return (
<>
<TodoInput onAddTodo={todoBloc.addTodo.next} />
<TodoList todos={this.state.todos} />
</>
)
}
}
class TodoBloc {
private _todos = new BehaviorSubject<Todo[]>([]);
public get todos = this._todos.asObservable();
private _addTodo = new Subject<string>();
public get addTodo(): Observer<string> {
return _addTodo;
}
constructor() {
this._addTodo.subscribe(text => {
const current = this._todos.getValue();
this._todo.next([...current, { text, id: newId() }]);
})
}
}
const todoBloc = new TodoBloc();
class Todo extends React.Component {
this.state = {
todos: []
};
componentDidMount() {
todoBloc.todos.subscribe(todos => {
this.setState({ todos });
});
}
render() {
return (
<>
<TodoInput onAddTodo={todoBloc.addTodo.next} />
<TodoList todos={this.state.todos} />
</>
)
}
}
class TodoBloc {
private _todos = new BehaviorSubject<Todo[]>([]);
public get todos = this._todos.asObservable();
private _addTodo = new Subject<string>();
public get addTodo(): Observer<string> {
return _addTodo;
}
constructor() {
this._addTodo.subscribe(text => {
const current = this._todos.getValue();
this._todo.next([...current, { text, id: newId() }]);
})
}
}