Redux (React Native)에서 저장소에 대한 디스패치 및 액세스 상태-정의되지 않은 반환

James Stirrat

내 기존 앱 중 하나에 redux를 구현하려고합니다 (처음으로). 본질적으로 매우 간단한 작업을 수행하려면 텍스트 입력을 사용하여 문자열을 저장소에 저장하고 redux를 사용하여 다른 구성 요소에 다시 전달합니다. 그러나 액션이 전달되지만 콘솔에 기록 할 때 입력 한 문자열에 대해 '정의되지 않음'이 계속 표시됩니다. 내가 어디로 잘못 가고 있는지 확실하지 않고 다른 질문으로 초보자의 마음이 훨씬 명확하지 않습니다!

단일 감속기를 정의하고 색인에 결합하고 저장소를 생성하고 (결합 된 감속기를 전달), 내 저장소가있는 공급자에 래핑 된 탐색 (전체 앱)을 만들고, 디스패치를 ​​활성화하기위한 디스패치 및 이벤트 / 액션을 생성했습니다 (기본적으로 사용자가 문자를 입력하고 계속 버튼을 누릅니다).

textInputPost.js : (감소 기)

const initialState = {
    textInputValue: '',
};

const textInputReducer = (state = initialState, action) => {
    console.log('textInputReducer', action);
    switch(action.type){
        case 'ADD_INPUT_TEXT':
            return { textInputValue: action.text };
        case 'RESET_INPUT_TEXT':
            return { textInputValue: ''}
    default:
        return state;
    }
}

export default textInputReducer;

index.js : (rootReducer-감속기 결합)

import { combineReducers } from 'redux';

import photoInputPost from './photoInputPost'
import cameraInputPost from './cameraInputPost'
import textInputPost from './textInputPost'

export default rootReducer = combineReducers({
    text: textInputPost
})

Index.js : (스토어)

import { createStore } from 'redux'
import rootReducer from './../reducers/index'

export default Store = createStore(rootReducer)

App.js : (React Navigation을 감싸는 공급자)

return (
            <Provider store={Store}>
                <Navigation/>
            </Provider>
        );

AddTextModal.js : (textInput에서 스토어 상태를 업데이트하기위한 컴포넌트)

import React from 'react';
import { StyleSheet, Text, View, TouchableOpacity, KeyboardAvoidingView, TextInput } from 'react-native';
import { AntDesign } from '@expo/vector-icons';
import { createAppContainer, createSwitchNavigator } from 'react-navigation';
import { createStackNavigator } from 'react-navigation-stack';
import { createBottomTabNavigator } from 'react-navigation-tabs';
import { FontAwesome5, Feather } from "@expo/vector-icons";
import { connect } from 'react-redux'

import ModalContainer from '../../App'

class AddTextModal extends React.Component {

    continueUpload = (textInput)  => {
        this.props.addText(textInput)
        console.log(this.props.textInputValue)
        this.props.navigation.navigate('Upload')
    }

    render() {
        return(
                  <View style={{backgroundColor:"#000000CC", flex:1}}>
                    <View style={{ backgroundColor:"#ffffff", marginLeft: 0, marginRight: 0, marginTop: 180, padding: 20, borderTopLeftRadius: 20, borderTopRightRadius: 20, flex: 1, }}>
                        <View style={styles.header}>
                            <TouchableOpacity style={{position: 'absolute'}} onPress={() => this.props.navigation.navigate('Home')}>
                                <Text style={styles.buttonFont}>Back</Text>
                            </TouchableOpacity>
                            <Text style={styles.headerText}>Write Something</Text>
                            <TouchableOpacity style={{position: 'absolute', right: 0}} onPress={(textInput) => this.continueUpload(textInput)}>
                                <Text style={styles.buttonFont}>Continue</Text>
                            </TouchableOpacity>

                        </View>
                        <View style={styles.uploadTextInput}>
                            <Feather name="message-square" size={14} color="grey" />
                            <TextInput style={{paddingLeft: 5, fontSize: 14}}
                                placeholder="What do you want to say?"
                                defaultValue={this.props.textInputValue}
                                onChangeText={textInput => this.props.addText(textInput)}
                                />
                        </View>
                    </View>
                 </View>
        );
    }
}

//#6 mapStateToProps to access store from our component
function mapStateToProps(state){
    return {
        textInputValue: state.textInputValue
    }
}

//#10. matchDispatchertoProps to establish dispatcher for actions. These actions will then go to functions in the reducer to change the app state
function mapDispatchToProps(dispatch) {
    return {
        addText: () => dispatch({type: 'ADD_INPUT_TEXT'}),
    }
}

UploadScreen.js : (AddTextModal의 텍스트 입력 저장 상태 중계를위한 컴포넌트)

import React from 'react';
import { Text, Image, View, TextInput, TouchableHighlight, TouchableOpacity } from 'react-native';
import { FontAwesome5, Feather } from "@expo/vector-icons";

import { connect } from 'react-redux'

import ToolbarComponent from './ToolbarComponent'
import styles from './../Styles';

import textInput from './../../containers/textInput'

class UploadScreen extends React.Component {

    uploadMedia = () => {
        //upload to DB - add to vault, home screen
        this.props.resetText()
        this.props.navigation.navigate('Home')
    }

    //viewPhoto function for viewing photo on full screen
    viewPhoto = () => {
        return
    }

    render() {
        return(
                  <View style={{backgroundColor:"#000000CC", flex:1}}>
                    <View style={{ backgroundColor:"#ffffff", marginLeft: 0, marginRight: 0, marginTop: 180, padding: 20, borderTopLeftRadius: 20, borderTopRightRadius: 20, flex: 1, }}>
                        <View style={styles.header}>
                            <TouchableOpacity style={{position: 'absolute'}} onPress={() => this.props.navigation.goBack()}>
                                <Text style={styles.buttonFont}>Back</Text>
                            </TouchableOpacity>

                            <TouchableOpacity style={{position: 'absolute', right: 10}} onPress={() => this.uploadMedia()}>
                                <Text style={styles.buttonFont}>Upload</Text>
                            </TouchableOpacity>

                            <View style={styles.uploadTextInput}>
                                    <Text>{this.props.textInputValue}</Text>
                            </View>
                        </View>
                    </View>
                 </View>
        );
    }
}

function mapStateToProps(state){
    return {
        textInputValue: state.textInputValue
    }
}

function mapDispatchToProps(dispatch) {
    return {
        resetText:() => dispatch({type: 'RESET_INPUT_TEXT'})
    }
}

export default connect(mapStateToProps, mapDispatchToProps)(UploadScreen);
TopherPedersen

문제는 mapDispatchToProps 함수에 페이로드를 지정하지 않았다는 것입니다. mapDispatchToProps 함수를 다음과 같이 다시 작성해보십시오.

function mapDispatchToProps(dispatch) {
    return {
        addText: (payload) => dispatch({type: 'ADD_INPUT_TEXT', payload: payload}),
    }
}

그리고 페이로드 이름을 'payload'로 변경 했으므로 감속기에서 'action.text'를 'action.payload'로 변경합니다.

const initialState = {
    textInputValue: '',
};

const textInputReducer = (state = initialState, action) => {
    console.log('textInputReducer', action);
    switch(action.type){
        case 'ADD_INPUT_TEXT':
            return { textInputValue: action.payload };
        case 'RESET_INPUT_TEXT':
            return { textInputValue: ''}
    default:
        return state;
    }
}

export default textInputReducer;

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

저장소 변수에 액세스하려고 할 때 React Redux "정의되지 않은 '상태'속성을 읽을 수 없습니다."오류

분류에서Dev

정의되지 않은 url 및 rootScope에 대한 액세스 보안

분류에서Dev

React redux에서 다른 감속기의 상태에 어떻게 액세스합니까? 감속기와 저장소 간의 상태 흐름

분류에서Dev

Redux 상태에서 객체를 변경하지 않는 디스패치

분류에서Dev

NextJS getInitialProps에서 디스패치가 호출 될 때 redux 상태에 액세스

분류에서Dev

React 컴포넌트의 기능에서 새로운 REDUX 상태에 액세스

분류에서Dev

useEffect 반환 함수에 정의되지 않은 Redux 상태 변수

분류에서Dev

tabnavigator에서 redux 상태에 액세스 (react-navigation)

분류에서Dev

React Redux-액션 소품에 정의되지 않은 무한 스크롤 호출

분류에서Dev

반응 redux 및 saga에서 디스패치가 완료된 후 상태 변수를 얻습니까?

분류에서Dev

useSelector를 사용하여 기능 구성 요소에서 redux의 저장 상태 변수에 액세스하는 방법은 무엇입니까?

분류에서Dev

React Native Redux : 액션 디스패치, 결과 반환

분류에서Dev

두 개의 동일한 JSON 객체 중 하나의 경우 자바 스크립트의 값에 액세스하면 다른 하나는 정의되지 않은 상태로 반환됩니다.

분류에서Dev

prop에 정의되지 않은 값을 말하는 react + redux에 대한 농담 테스트

분류에서Dev

상수 파일에서 Redux 저장소에 액세스

분류에서Dev

React Native Redux-왜 내 redux 저장소의 데이터에 액세스하여 표시 할 수 없습니까?

분류에서Dev

React Hook : 외부 함수 내부 상태에 대한 액세스

분류에서Dev

Redux 스토어에 내 상태가 표시되지만 반응 구성 요소가 정의되지 않은 이유는 무엇입니까?

분류에서Dev

redux-toolkit 구성 저장소 및 사용자 정의 저장소 향상기를 사용하여 "감속기가받은 이전 상태에서 예기치 않은 키"foo "가 발견되었습니다."

분류에서Dev

React Testing Library 테스트에서 "마운트되지 않은 구성 요소에 대한 반응 상태 업데이트"오류가 계속 발생합니다.

분류에서Dev

반응 네이티브에서 상태에 액세스하려고 할 때 "정의되지 않음은 개체가 아닙니다"

분류에서Dev

정의되지 않은 속성에 대한 액세스 권한이 있지만 정의되어 있습니다.

분류에서Dev

반응 구성 요소에서 redux 저장소에 제대로 액세스 할 수 없습니다.

분류에서Dev

React Native에서 영구 세션을 위해 액세스 토큰을 redux 상태로 설정하는 것이 안전합니까?

분류에서Dev

다른 포인터에서 하나의 기본 클래스에 대한 다중 상속 및 일반 액세스

분류에서Dev

서비스에서 반환 된 객체에 액세스 할 수 있지만 해당 속성에 액세스하면 정의되지 않은

분류에서Dev

.html ()을 통해 요소에 액세스하는 jquery는 정의되지 않은 것을 반환합니다.

분류에서Dev

React : 상태 (인덱스가 정의되지 않음)에있는 배열의 인덱스에 액세스 할 수 없습니다.

분류에서Dev

기본 구성 요소 클래스에서 상태를 사용할 때 반응에서 정의되지 않은

Related 관련 기사

  1. 1

    저장소 변수에 액세스하려고 할 때 React Redux "정의되지 않은 '상태'속성을 읽을 수 없습니다."오류

  2. 2

    정의되지 않은 url 및 rootScope에 대한 액세스 보안

  3. 3

    React redux에서 다른 감속기의 상태에 어떻게 액세스합니까? 감속기와 저장소 간의 상태 흐름

  4. 4

    Redux 상태에서 객체를 변경하지 않는 디스패치

  5. 5

    NextJS getInitialProps에서 디스패치가 호출 될 때 redux 상태에 액세스

  6. 6

    React 컴포넌트의 기능에서 새로운 REDUX 상태에 액세스

  7. 7

    useEffect 반환 함수에 정의되지 않은 Redux 상태 변수

  8. 8

    tabnavigator에서 redux 상태에 액세스 (react-navigation)

  9. 9

    React Redux-액션 소품에 정의되지 않은 무한 스크롤 호출

  10. 10

    반응 redux 및 saga에서 디스패치가 완료된 후 상태 변수를 얻습니까?

  11. 11

    useSelector를 사용하여 기능 구성 요소에서 redux의 저장 상태 변수에 액세스하는 방법은 무엇입니까?

  12. 12

    React Native Redux : 액션 디스패치, 결과 반환

  13. 13

    두 개의 동일한 JSON 객체 중 하나의 경우 자바 스크립트의 값에 액세스하면 다른 하나는 정의되지 않은 상태로 반환됩니다.

  14. 14

    prop에 정의되지 않은 값을 말하는 react + redux에 대한 농담 테스트

  15. 15

    상수 파일에서 Redux 저장소에 액세스

  16. 16

    React Native Redux-왜 내 redux 저장소의 데이터에 액세스하여 표시 할 수 없습니까?

  17. 17

    React Hook : 외부 함수 내부 상태에 대한 액세스

  18. 18

    Redux 스토어에 내 상태가 표시되지만 반응 구성 요소가 정의되지 않은 이유는 무엇입니까?

  19. 19

    redux-toolkit 구성 저장소 및 사용자 정의 저장소 향상기를 사용하여 "감속기가받은 이전 상태에서 예기치 않은 키"foo "가 발견되었습니다."

  20. 20

    React Testing Library 테스트에서 "마운트되지 않은 구성 요소에 대한 반응 상태 업데이트"오류가 계속 발생합니다.

  21. 21

    반응 네이티브에서 상태에 액세스하려고 할 때 "정의되지 않음은 개체가 아닙니다"

  22. 22

    정의되지 않은 속성에 대한 액세스 권한이 있지만 정의되어 있습니다.

  23. 23

    반응 구성 요소에서 redux 저장소에 제대로 액세스 할 수 없습니다.

  24. 24

    React Native에서 영구 세션을 위해 액세스 토큰을 redux 상태로 설정하는 것이 안전합니까?

  25. 25

    다른 포인터에서 하나의 기본 클래스에 대한 다중 상속 및 일반 액세스

  26. 26

    서비스에서 반환 된 객체에 액세스 할 수 있지만 해당 속성에 액세스하면 정의되지 않은

  27. 27

    .html ()을 통해 요소에 액세스하는 jquery는 정의되지 않은 것을 반환합니다.

  28. 28

    React : 상태 (인덱스가 정의되지 않음)에있는 배열의 인덱스에 액세스 할 수 없습니다.

  29. 29

    기본 구성 요소 클래스에서 상태를 사용할 때 반응에서 정의되지 않은

뜨겁다태그

보관