나는 플럭스를 처음 사용합니다. 나는이 문제를 해결하기 위해 지난 10 시간 동안 고심하고있다. 하나의 샘플 할일 앱을 만들었습니다. 처음에는 서버에서 일부 데이터를로드하려고합니다. 그러나 나는 그 데이터를 얻는 방법을 모른다. 그 시간에 버튼을 클릭하는 동안 데이터를 가져올 수 있습니다. 제발 누군가가 나를이 문제에서 도와주세요. 오랫동안 이걸 끝내려고하기 때문에.React FLUX에서 API 호출을 만드는 방법은 무엇입니까?
내 샘플 코드,
App.js
var React = require('react');
import * as TodoActions from "./js/Actions";
import TodoStore from "./js/stores/EventLists";
export class EventListing extends React.Component {
constructor() {
super();
this.getTodos = this.getTodos.bind(this);
this.state = {
todos: TodoStore.getAll(),
};
}
componentWillMount() {
TodoStore.on("change", this.getTodos);
}
componentWillUnmount() {
TodoStore.removeListener("change", this.getTodos);
}
getTodos() {
this.setState({
todos: TodoStore.getAll(),
});
}
reloadTodos() {
TodoActions.reloadTodos();
}
render() {
var List = this.state.todos.map(function(el, i){
return <li key={i}>
<div>{el.STA_NAME}</div>
</li>;
});
return (
<div className="listing">
<button onClick={this.reloadTodos.bind(this)}>Reload!</button>
<ul>
{List}
</ul>
</div>
);
}
}
var Events = React.createClass({
render:function(){
return (<div>
<EventListing />
</div>);
}
});
module.exports = Events;
Store.js
import EventEmitter from 'events';
import dispatcher from "../dispatcher"
class EventLists extends EventEmitter {
constructor(){
super();
this.todos = [{}];
}
createTodo(text) {
const id = Date.now();
this.todos.push({
id,
text,
complete: false,
});
this.emit("change");
}
getAll() {
return this.todos;
}
handleActions(action) {
switch(action.type) {
case "CREATE_TODO": {
this.createTodo(action.text);
break;
}
case "RECEIVE_TODOS": {
this.todos = action.todos;
this.emit("change");
break;
}
}
}
};
const eventLists = new EventLists;
dispatcher.register(eventLists.handleActions.bind(eventLists));
export default eventLists;
Action.js
import dispatcher from "./dispatcher";
export function createTodo(text) {
dispatcher.dispatch({
type: "CREATE_TODO",
text,
});
}
export function deleteTodo(id) {
dispatcher.dispatch({
type: "DELETE_TODO",
id,
});
}
export function reloadTodos() {
var loadData;
$.ajax({
url:url,
type:'GET',
contentType: 'application/json; charset=UTF-8',
dataType:'json',
success:function(data) {
loadData = data;
}.bind(this)
});
dispatcher.dispatch({type: "FETCH_TODOS"});
setTimeout(() => {
console.log(loadData);
dispatcher.dispatch({type: "RECEIVE_TODOS", todos: loadData});
}, 1000);
}
Dispatcher.js 난 당신의 코드와는 Action.js에 변경해야 할 유일한 일을 시도했습니다
import { Dispatcher } from "flux";
export default new Dispatcher;
그냥 제안 사항입니다 ... 플럭스 대신에 redux를 시도하십시오 ... – abhirathore2006
자습서에서했던 것처럼 액시오를 사용해 보셨습니까? 뒤따라? 나는 같은 것을 따라 갔지만 여전히 API없이 내부적으로 실험하고있다. –