在App.js中集成redux mapStateToProps on react native

问题描述 投票:0回答:1

我想在我的App.js文件中集成redux mapStateToPros。为什么?因为我的模态出现时需要模糊效果。所以我们假设我有以下App.js

import React, {Component} from 'react';
import {createStackNavigator, createAppContainer} from 'react-navigation';
import {Provider} from 'react-redux';
import { PersistGate } from 'redux-persist/integration/react'
import store, { persistor } from './src/js/store';
import {createStore, applyMiddleware} from 'redux';

import Reducers from './src/Reducers';

import Preload from './src/screens/Preload';

let store = createStore(Reducers);

const AppNavigator = createStackNavigator({
  Preload: {
    screen: Preload,
  },
});

const AppContainer = createAppContainer(AppNavigator);

export default class App extends Component {
  render () {
    return (
        <Provider store={store}>
          <PersistGate loading={null} persistor={persistor}>
            <AppContainer />
          </PersistGate>
        </Provider>
    )
  }

我需要做类似以下的事情但是当我的状态改变时,模糊不会触发。

import React, {Component} from 'react';
import {createStackNavigator, createAppContainer} from 'react-navigation';
import {Provider} from 'react-redux';
import {  findNodeHandle } from 'react-native';
import { PersistGate } from 'redux-persist/integration/react'
import store, { persistor } from './src/js/store';
import {createStore, applyMiddleware} from 'redux';
import { BlurView } from 'react-native-blur';

import Reducers from './src/Reducers';

import Preload from './src/screens/Preload';

let store = createStore(Reducers);

const AppNavigator = createStackNavigator({
  Preload: {
    screen: Preload,
  },
});

onViewLoaded() {
    this.setState({ viewRef: findNodeHandle(this.viewRef) });
}

function mapStateToProps(state) {
  return {
    modalIsOpened: state.modalReducer.modalIsOpened,
  }
}

const AppContainer = connect(mapStateToProps)(createAppContainer(AppNavigator));

export default class App extends Component {
  render () {
    return (
        <Provider store={store}>
          <PersistGate loading={null} persistor={persistor}>
            <AppContainer 
              ref={(viewRef) => { this.viewRef = viewRef; }}
              onLayout={() => { this.onViewLoaded(); }}
             />

            {modalIsOpened && <BlurView
              style={{
                position: "absolute",
                top: 0,
                left: 0,
                bottom: 0,
                right: 0
              }}
              viewRef={this.state.viewRef}
              blurType="dark"
              blurAmount={5}
              blurRadius={5}
            />}
          </PersistGate>
        </Provider>
    )
  }

希望我清楚自己:)

react-native redux react-navigation
1个回答
0
投票

你在这里将modalIsOpened道具映射到<AppContainer>,但期望它存在于<App>

<Blur>移动到<AppContainer>内并将支柱映射到其中。

© www.soinside.com 2019 - 2024. All rights reserved.