2016-10-27 2 views
0

Я новичок в Redux, поэтому не уверен, что я делаю неправильно. Я использую счетчик, который работает на первой страницеНе удается подключить магазин к другой странице

Первая страница:

'use strict'; 

import React, {Component} from 'react'; 
import {bindActionCreators} from 'redux'; 
import Counter from '../components/counter'; 
import * as counterActions from '../actions/counterActions'; 
import { connect } from 'react-redux'; 
import { Router, Scene, Route, ActionConst } from 'react-native-router-flux'; 

import Home from './Home'; 


class Routing extends Component { 
    constructor(props) { 
    super(props); 
    } 

    componentDidMount(){ 
    const { state, actions } = this.props; 
    console.log(state.count); //This returns 0 just like it's supposed to 
    } 

    render() { 
    return (
     <Router> 
     <Scene hideNavBar="true" key="root"> 
      <Scene counter={state.count} key="home" component={Home} initial={true} animation="false" duration='0' /> 
     </Scene> 
     </Router> 
    ) 
    } 
} 

export default connect(state => ({ 
    state: state.counter 
    }), 
    (dispatch) => ({ 
    actions: bindActionCreators(counterActions, dispatch) 
    }) 
)(Routing); 

Главная страница:

import React, { Component } from 'react'; 
import { Text } from 'react-native'; 
import { Actions } from 'react-native-router-flux'; 
import { connect } from 'react-redux'; 
import * as counterActions from '../actions/counterActions'; 
import {bindActionCreators} from 'redux'; 



export default class Home extends Component { 
    constructor(props) { 
    super(props); 

    this.state = {}; 
    } 


    render() { 
    const { state, actions } = this.props; 
    return (
     <Text> 
      {state.counter} 
     </Text> 
    ) 
    } 
} 


export default connect(state => ({ 
    state: state.counter 
    }), 
    (dispatch) => ({ 
    actions: bindActionCreators(counterActions, dispatch) 
    }) 
)(Home); 

Соединим на домашней странице бросает мне ошибку Failed to execute 'importScripts' on 'WorkerGlobalScope'

Я думал, что это может быть связано с React Native Router Flux, потому что я использую Сцены, но это происходит, когда я пытаюсь подключить магазин к Домашней странице.

+1

У вас есть 2 'экспорта default's для' дома 'компонента. Только один «экспорт по умолчанию» разрешен для каждого файла. 'const' является блочным, поэтому назначение' const state = ... 'в' componentDidMount 'Routing' делает' state' недоступным внутри 'render', правильно? – NiFi

+0

Вы правы, я не могу получить доступ к нему внутри рендеринга. Но как я должен подключиться к дому без использования экспорта по умолчанию? Если я его не использую, он не выдаст ошибку, но я до сих пор не могу получить доступ к this.props.counter. –

+0

Я удалил экспорт по умолчанию из класса Home вместо этого, и это очень помогло! –

ответ

1

Несколько указателей для вашего кода.

  1. Есть в настоящее время два export default s для Home компонента. Только один экспорт по умолчанию разрешен для каждого файла. Вы хотите, чтобы выставить результат connect(), поэтому изменить

    export default class Home extends Component {

    в

    class Home extends Component {.

  2. С const является с блочным кодом, он существует только в текущем блоке. Определение state и actions в Routing's componentDidMount означает, что они недоступны внутри render. Просто переместите эти определения внутри render метода Routing компонента:

    render() { 
        const { state, actions } = this.props; 
    
        return (
        <Router> 
         <Scene hideNavBar="true" key="root"> 
         <Scene counter={state.count} key="home" component={Home} initial={true} animation="false" duration='0' /> 
         </Scene> 
        </Router> 
    ) 
    } 
    
Смежные вопросы