Почему redux mapStateToProps не обновляет реквизиты компонентов, даже если хранилище обновляется? - PullRequest
0 голосов
/ 05 февраля 2019

Redux store обновляется корректно, но реагирует на реквизиты компонентов.Я проверил избыточное глобальное состояние с помощью инструмента удаленной разработки, и он обновляется, как и ожидалось.Но когда я проверяю реквизиты компонентов с помощью response-devtools, он не обновляется.Если я вызываю getUserPublis () в компоненте более высокого порядка (например, индекс), тогда mapStateToProps правильно отображает эти реквизиты, но когда я создаю новый элемент, он не отображается (но он корректно обновляется в хранилище).Это похоже на то, что mapStateToProps () не вызывается при обновлении состояния избыточности

class Profile extends Component {

    static navigationOptions = ({navigation, screenProps}) => ({
        title: 'Perfil',
        headerRight: <HeaderButton navigation={navigation}/>,
    });

    componentDidMount(){
        getUserPublis(this.props.userData.ownPublis)
    }
    onPressCard = (publi) => {
        this.props.navigation.navigate('cardDescription', {
            data: publi,
            user: props.userName
        })
    }

    maybeRenderAddButton = () => {
        if (this.props.userData.isCommerce){
            return(
                <FloatingButton
                    icon="md-add"
                    color="white"
                    onPress={() => this.props.navigation.navigate('offerNew', {
                        title: "Crear anuncio"
                    })}
                />
            )
        } else {
            return console.log('no hay add button')
        }
    }

    render(){
        this.maybeRenderAddButton()
        if (this.props.publis.length === 0) {
            return(
                <Text> Loading </Text>
            )   
        }
        return (
            <ScrollView>
            {
                this.props.publis.map((publi, index) => {
                        return(
                            <CardGeneral
                                key={index}
                                onPressCard={() => onPressCard(publi)}
                                data={publi}
                                user={this.props.user.displayName}
                            />
                        )
                    }
                )
            }

            </ScrollView>


            );
    }

}

function mapStateToProps(state) {
    return {
        user: state.auth.user,
        userData: state.firestore.userData,
        publis: state.publis
    }
}

export default connect(mapStateToProps)(Profile)

Редуктор:

const initialState = []

function publis(state = initialState, action) {
    switch (action.type) {
        case 'FIRESTORE_PUBLI_SNAPSHOT': {
            return [
                ...state,
                action.payload.data
            ]
        }
        default:
            return state
    }
}

export default publis

Ответы [ 4 ]

0 голосов
/ 24 марта 2019
export default connect(mapStateToProps,{getUserPublis})(Profile)
0 голосов
/ 06 февраля 2019

Хорошо, наконец-то у меня есть ответ, это невероятно, потому что я потратил почти 5 дней на эту ошибку, и, как вы можете видеть, в коде нет ничего явно неправильного.
Для этого приложения мой стек: реагирует-нативный, экспо , реагирует-навигация и избыточен.
Проблема, по-видимому, связана с expo, потому что когда я использую симулятор для запуска приложения в режиме разработки, проблема возникает (mapStateToProps вызывается только один раз, когда компонент монтируется), , но когда я запускал приложение вAndroid-устройство все идет хорошо , но только в первый раз, когда я запустил ... В следующий раз, когда приложение имеет ту же проблему в Android-устройстве и симуляторе IOS.Поэтому я попытался запустить приложение в «режиме разработки экспозиции», и волшебным образом все идет хорошо.
Это проблема, потому что режим разработчика медленный, и я не могу использовать инструменты разработчика, но полезно знать, в чем реальная проблема.Теперь я собираюсь опубликовать это на форуме.
PD: я уже обновил expo и очистил кеш expo.

0 голосов
/ 08 марта 2019

У меня была та же ошибка с экспо + реагировать-навигация + редукс + база, потратил неделю на поиск решения.Redux State был обновлен правильно, он был виден в Dev Tools, но не было никаких изменений в реквизитах компонента.Свойства обновлялись только при первой визуализации компонента.

В моем случае проблема была решена путем переключения режима Экспо в режим производства.

Here is the switch image in Expo v32

0 голосов
/ 05 февраля 2019

Попробуйте, это должно работать

export default connect(mapStateToProps,null)(Profile)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...