Невозможно передать данные после вызова действия в избыточном
Я новичок в редуксе. Я использую ES5 в моем проекте. Я только начал реализовывать в этом редукс.
main.js:
let store = createStore(rootReducer); //Reducer defined in reducer.js file
class RenderClass extends Component {
render() {
return (
<Provider store={store}>
<Router history={hashHistory}>
<Route path="/" component={MainLayout}>
<Route name="employees" path="/employees" url="http://localhost:8080/" component={EmployeeTable}></Route>
.....
</Route>
<Router>
</Provider>
);
}
}
App.jsx:
import * as Actions from './action-creator';
const MainLayout = React.createClass({
render: function() {
const { dispatch, list } = this.props;
let actions = bindActionCreators(Actions, dispatch);
console.log(actions);
return (
<div className="wrapper">
<Header actions={actions} list={list} params={this.props.params} />
{this.props.children}
</div>
)
}
});
function select(state) {
return {
list: state.listingReducer
}
}
export default connect(select)(MainLayout);
header.js:
define(
[
'react',
'jquery',
'appMin'
],
function (React, $) {
var Link = require('reactRouter').Link;
var Header = React.createClass({
handleClick: function () {
//Action called here
this.props.actions.listEmployees();
},
render: function () {
return (
<ul className="sidebar-menu">
<li>
<Link to={'/employees'} onClick={this.handleClick} list={this.props.list} actions={this.props.actions}><i className="fa fa-home"></i>Employees</Link>
</li>
</ul>
);
}
});
return Header;
}
)
employee.js:
define(
[
'react',
'jquery',
'appMin'
],
function (React, $) {
var EmployeeTable = React.createClass({
render: function () {
if (this.props.list != undefined) {
var listItems = this.props.list.map(function (listItem) {
return (
<tr key={listItem.id}>
<td> {listItem.name}</td>
......
</tr>
);
}, this);
})
}
return (
<table>
<tbody>
{listItems}
</tbody>
</table>
);
}
})
}
)
action-creator.js:
export function listEmployees() {
return {
type: types.LIST_EMPLOYEES
};
}
reducer.js:
function addEmployee(state, action) {
switch (action.type) {
case types.LIST_EMPLOYEES:
return {"id":"1", "name":"Stackru"}
default:
return state
}
}
function listingReducer(state = [], action) {
switch (action.type) {
case types.LIST_EMPLOYEES:
return [
...state,
addEmployee(undefined, action)
]
default:
return state;
}
}
const rootReducer = combineReducers({
listingReducer
})
export default rootReducer
При щелчке записи "Сотрудники", определенной в файле "header.js", я вызываю действие listEmployees() и хочу отобразить список сотрудников на экране. Но когда я запускаю проект, при нажатии "Сотрудники" вызывается действие, а затем редуктор. Но в файле header.js я вижу обновленный "this.props.list", но тот же, что и для EmployeeTable, не определен. Пожалуйста помоги.
1 ответ
Вы должны использовать mapStateToProps
сделать список штата Reducer доступным как реквизит для EmployeeTable
В вашем файле employee.js после компонента EmployeeTable React добавьте эту функцию
function mapStateToProps(state){
return ( list: state.listingReducer)
}
Кроме того, вам нужно импортировать rootReducer в тот же файл и использовать функцию connect из response-redux как
export connect(mapStateToProps)(EmployeeTable);