В общем пытаюсь разобраться во Flux подходе в React в RoR. Посоветовали для изучения Redux.
Поставил gem 'react-rails'.
Redux ставил через npm
package.json - выглядит примерно так.
{
"version": "0.1.1",
"main": "index.js",
"dependencies": {
"react": "^0.13.3",
"react-redux": "^1.0.1",
"redux": "^1.0.1",
"redux-thunk": "^0.1.0"
},
"devDependencies": {
"babelify": "^6.2.0",
"browserify": "^11.0.1",
"browserify-incremental": "^3.0.1"
}
}
Так вот, пытаюсь получить ajax с сервера. Я понял что его надо делать в action. Но как?
Сейчас action выглядит так.
export const LOAD_INFO = 'LOAD_INFO';
export function loadInfo() {
return {
type: 'LOAD_INFO',
info: // ?
}
}
До этого в компоненте я делал это примерно так.
componentDidMount: function() {
$.ajax({
url: this.props.url,
dataType: 'json',
type: 'GET',
success: function(data, textStatus, jqXHR) {
this.setState({
book: data.book,
magazine: data.magazine
});
}.bind(this),
error: function(xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
}
UPD:
В action получаю данные с сервера.
import request from 'axios';
export const LOAD_INFO = 'LOAD_INFO';
export function loadInfo() {
return {
type: 'LOAD_INFO',
info: request.get(Routes.root_path(), {
headers: {
'Accept': 'application/json'
}
})
}
}
reducer
import { LOAD_INFO }
from '../actions/action';
export default function info(state = 0, action) {
switch (action.type) {
case LOAD_INFO:
return action;
default:
return state;
}
}
component
import React, { Component, PropTypes } from 'react';
class Info extends Component {
render() {
const { info } = this.props;
return (
<div>
{ info }
</div>
);
}
}
Info.propTypes = {
info: PropTypes.object.isRequired
};
export default Info;