Невозможно передать данные после вызова действия в избыточном

Я новичок в редуксе. Я использую 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);
Другие вопросы по тегам