React Native и Redux: компонент не рендерится после изменения состояния - PullRequest
0 голосов
/ 04 июля 2018

У меня есть компонент, связанный с моим магазином. Этот компонент отправляет действие и корректно изменяет состояние ( см. Журналы ). Но мой компонент должен отображать это изменение состояния. Но это не рендеринг.

Вот мой код:

Мой магазин Redux, редуктор и Action выглядит так:

//store.js
import { createStore, applyMiddleware } from 'redux';
import  thunk  from 'redux-thunk'
import { logger } from 'redux-logger'

import reducer from "./src/reducers/index"

const middleware=applyMiddleware(thunk, logger)
export default store = createStore(reducer, middleware);


//reducers/index.js
const initialState = {
    isLoggedIn:false,
}
export default loginReducer=(state = initialState, action) => {
  switch (action.type) {

  case "LOGGED_IN":
    return { ...state, isLoggedIn:true };

  default:
    return state
  }
};


//actions.js
export const logIn = (token) => ({
  type: "LOGGED_IN",
  payload: token
})

Приложение My React Native упаковано так:

import { AppRegistry } from 'react-native';
import App from './src/App';
import React from 'react';
import { Provider } from 'react-redux';
import store from './store'

/**
 * Wrap App in Redux Provider
 */
const MainApp = () => (
    <Provider store={store}>
        <App />
    </Provider>
)
AppRegistry.registerComponent('SalesforcegoesmobleReactNative', () => MainApp);

И, наконец, мой Компонент, который я ожидаю обновить состояние и перерисовать после изменения состояния:

import React, { Component } from 'react';
import { View, Text, Button } from 'react-native';
import { connect } from "react-redux"
import { logIn } from '../actions/actions';

@connect(
    (state) => {
        return {
            isLoggedIn: state.isLoggedIn
        }
    },
    (dispatch) => {
        return {
            updateLogin: id => dispatch(logIn(id))
        }
    }
)
export class InvoiceList extends Component {
    render() {
        console.log("rendering...")
        return (
            <View>
                <Button title="Update Login" onPress={() => this.props.updateLogin("test")} />
                <Text>{this.props.isLoggedIn ? "true" : "false"}</Text>
            </View>
        );
    }
}

Так что, как вы видите, состояние изменяется правильно. Но после этого я ожидаю, что компонент снова будет визуализироваться («рендеринг ...» в консоли и в текстовых тегах будет показывать true вместо false)

Я не вижу ошибки. Можете ли вы помочь мне, пожалуйста?

1 Ответ

0 голосов
/ 04 июля 2018

Попробуйте определить ваше значение isLoggedIn в вашем connect:

(state) => {
        return {
            isLoggedIn: state.loginReducer.isLoggedIn
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...