【问题标题】:Problems accessing state in React-native with redux app使用 redux 应用程序在 React-native 中访问状态的问题
【发布时间】:2016-05-01 12:12:18
【问题描述】:

所以我是Redux 的新手,在访问STATE 时遇到问题。当我将constructor() 方法添加到我的Component (Welcome) 中时,我收到Cannot find module /Welcome 错误。我将在下面粘贴我的代码,因为我真的很挣扎!

我只是想打印出文本状态!

组件/欢迎/index.jsx

import React, { Text, View, StyleSheet } from 'react-native';
import {bindActionCreators} from 'redux';
import {connect} from 'react-redux';


const Welcome = React.createClass({ //() => (

   constructor() {
        super(props, context);
        console.log("context", this.context);
    }

    render () {
        // state = super(props);
        // console.log(state);
        return (
        <View style={ styles.container }>
            <Text style={ styles.welcome }>
                React Native Redux Starter Kit
            </Text>
            <Text style={ styles.instructions }>
                { this.props.text }
            </Text>
            <Text style={ styles.instructions }>
                Press Cmd+R to reload,{'\n'}
                Cmd+D or shake for dev menu
            </Text>
        </View>
        )
    }
// );
});

容器/app.jsx:

import React, { Component } from 'react-native';
import { Provider } from 'react-redux';
import configureStore from 'configStore';
import ExNavigator from '@exponent/react-native-navigator';
import routes from 'routes';

export default class App extends Component{



   /**
     * Render
     *
     * @return {jsx} Render <Provider /> component
     */
    render(){
        return (
            <Provider store={ configureStore() }>
                <ExNavigator
                  initialRoute={ routes.getHomeRoute() }
                  style={{ flex: 1 }}
                  sceneStyle={{ paddingTop: 64 }} />
            </Provider>
        );
    }

}

reducers/bar.jsx:

这是设置 text = "testssters" 的状态。我正在尝试在我的组件中打印出来。

import Immutable from 'immutable';
import { BAR } from 'constants/ActionTypes';

const initialState = Immutable.fromJS({
    text: "hi"
});

export default function bar(state = {
    text: "testssters",
  }, action) 
{
    switch(action.type) {
        case BAR:
            state = state;
            break;
    }

    return state;
}

routes.jsx:

const routes = {};

    /**
     * Homepage
     *
     */

     // Shows the homepage (Welcome/index.js)
    routes.getHomeRoute = () => ({
        getSceneClass() {
            return require('Welcome/').default;
        },
        getTitle() {
            return 'Welcome';
        }
    });

configStore.jsx:

import { createStore, combineReducers, applyMiddleware, compose } from 'redux';
import thunk from 'redux-thunk';
import * as reducers from 'reducers/';

const createStoreWithMiddleware = compose(
    applyMiddleware(thunk)
    // Add remote-redux-devtools
)(createStore);

export default function configureStore() {
    return createStoreWithMiddleware(combineReducers(reducers));
}

【问题讨论】:

    标签: reactjs react-native redux redux-thunk


    【解决方案1】:

    React.createClass() 需要一个对象而不是函数。

    如果您使用createClass(),为了设置初始状态,请使用getInitialState

    const Welcome = React.createClass({
        getInitialState: function () {
            return { myState: 1 };
        },
        render: function () {}
    });
    

    如果你想使用 ES6 类,那么看起来像这样

    class Welcome extends React.Component {
        constructor() {
            super();
            this.state = { myState: 1 };
        }
        render() {
    
        }
    }
    

    【讨论】:

    • 太棒了,我想知道如何从组件内部的减速器访问state = { text: "testssters", }??
    • 如果您使用本地组件状态,您只需将其引用到this.state.text,如果您使用 Redux 状态,则必须使用this.props.text,然后让 Redux 将其注入您通过提供商和connect 提供的道具。
    • 我的意思不是很痛苦,但你能不能做个样品?我一直在尝试这样做时遇到了很多麻烦! ://
    • 此链接对您有很大帮助! redux.js.org/docs/basics/UsageWithReact.html
    • 我什么都试过了!我无法将&lt;Provider store={ configureStore() }&gt; 中的商店传递给我的Welcome 组件。鉴于上面的代码,我知道如何做到这一点吗?抱歉又打扰你了!!
    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 2020-10-07
    • 1970-01-01
    • 2021-04-29
    • 2017-05-11
    • 2021-03-08
    • 2020-06-19
    • 2016-12-08
    相关资源
    最近更新 更多