인프런 커뮤니티 질문&답변

Young님의 프로필 이미지
Young

작성한 질문수

핸즈온 리액트 네이티브

9.4 :: 닉네임 변경하기

9.4 왜 DisplayName이 한글자밖에 안찍힐까요?

작성

·

196

·

수정됨

0

프로필 수정하는 부분에서

DisplayName을 넣어서 바꿔보면

 

맨첫 한글자만 가져오게 되는데

 

setDisplayName이 말을 안듣는 것인지...

뭐가 문제인건지 모르겠네요...

 

코드 확인한번만 해주시면 감사하겠습니다.

import { StyleSheet, Text, View, Button, Pressable, TextInput, Keyboard, Alert } from 'react-native';
import PropTypes from 'prop-types';
import { useNavigation } from '@react-navigation/native';
import { useUserState } from '../contexts/UserContext';
import FastImage from '../components/FastImage';
import { MaterialCommunityIcons } from '@expo/vector-icons';
import { GRAY, WHITE } from '../colors';
import HeaderRight from './../components/HeaderRight';
import { useCallback, useEffect, useLayoutEffect, useState } from 'react';
import { updateUserInfo } from '../api/auth';
import SafeInputView from '../components/SafeInputView';

const UpdateProfileScreen = () => {
    const navigation = useNavigation();

    const [user, setUser] = useUserState();
    const [displayName, setDisplayName] = useState(user.displayName);
    const [disabled, setDisabled] = useState(true);
    const [isLoading, setIsLoading] = useState(false);

    const onSubmit = useCallback(async () => {
        Keyboard.dismiss();
        if (!disabled) {
            setIsLoading(true);
            try {
                const userInfo = { displayName };
                console.log(userInfo);
                await updateUserInfo(userInfo);
                setUser((prev) => ({ ...prev, ...userInfo }));
                // navigation.goBack();
                setIsLoading(false);
            } catch (error) {
                Alert.alert('사용자 수정 실패', error.message);
                setIsLoading(false);
            }
        }
    }, [disabled, displayName, navigation, setUser]);

    useEffect(() => {
        setDisabled(!displayName || isLoading);
        console.log('current', displayName);
    }, [displayName, isLoading]);

    useLayoutEffect(() => {
        navigation.setOptions({
            headerRight: () => <HeaderRight onPress={onSubmit} disabled={disabled} />,
        });
    }, [navigation, disabled]);

    return (
        <SafeInputView>
            <View style={styles.container}>
                <View>
                    <View>
                        <FastImage source={{ uri: user.photoURL }} style={styles.photo}></FastImage>
                        <Pressable onPress={() => {}} style={styles.imageButton}>
                            <MaterialCommunityIcons name="image" size={20} color={WHITE} />
                        </Pressable>
                    </View>
                    <TextInput
                        value={displayName}
                        onChangeText={(text) => setDisplayName(text.trim())}
                        style={styles.input}
                        placeholder="NickName"
                        textAlign="center"
                        maxLength={10}
                        returnKeyType="done"
                        autoCapitalize="none"
                        autoCorrect={false}
                        textContentType="none"
                    />
                </View>
            </View>
        </SafeInputView>
    );
};

답변 1

0

김범준님의 프로필 이미지
김범준
지식공유자

안녕하세요,

 

질문을 할 때 프로젝트 전체 코드를 깃헙에 올리고 레포 링크와 함께 상세한 상황설명을 함께 남겨주세요.

그래야 정확한 확인이 가능합니다.

 

닉네임을 변경하기 위해 화면에서 닉네임을 입력하면 첫 글자만 나타난다는 얘기인가요?

올려주신 코드를 봤을때는 특별히 오타나 문제가 보이지 않습니다.

 

코드 전체를 올려주시면 조금 더 확인해 보겠습니다.

추가로 문제가 발생한 상황에서 어떤 값을 입력했는지도 함께 알려주세요.

감사합니다.

Young님의 프로필 이미지
Young

작성한 질문수

질문하기