Состояние React Native Set не работает внутри пользовательского метода (функциональный компонент)Javascript

Форум по Javascript
Ответить
Anonymous
 Состояние React Native Set не работает внутри пользовательского метода (функциональный компонент)

Сообщение Anonymous »

Я столкнулся со своеобразным сценарием, который я не могу понять.
У меня есть экран регистрации (функциональный компонент) и экран дополнительной информации (функциональный компонент) в навигаторе стека.
На экране регистрации У меня есть метод, который обновляет значение поля ввода текста при нажатии кнопки регистрации. Метод представлен ниже (Для простоты удален нежелательный код).
Когда я нажимаю кнопку регистрации на том же экране (экран регистрации), я вижу, что вызывается метод регистрации, который обновляет строку. чтобы Проверить 1, а также отражается в поле ввода, проблем нет... Но когда я перехожу к следующему экрану (экран дополнительной информации), передав этот метод как одно из свойств в объекте навигации и вызовите тот же метод с этого экрана, используя навигацию props, я вижу, что вызывается тот же метод, но состояние строки не меняется на Check 1 . Ниже блок кода, который я использовал для вызова метода регистрации с другого экрана.
**
// this line takes the user back to the registration screen
navigation.dispatch(
StackActions.push("RegisterScreen", {
params: validateParam,
})
);
// This line calls the signup Method in the registration screen
route.params.params.myParam(validateParam);

**

Еще одна вещь, которую я заметил в журналах: когда метод регистрации вызывается на том же экране (экран регистрации), строка ниже журнала не печатается.
console.log("Внутренний экран регистрации"); Но когда он вызывается как свойство с другого экрана, эта строка отображается в консоли сразу после выполнения этого метода, что, я думаю, и является причиной проблемы. Может кто-нибудь объяснить, почему это не работает.
const RegisterScreen = ({ navigation, route, ...props }) => {

console.log("Inside Register Screen");
const [additionalInfo, setadditionalInfo] = useState(
" Additional Information"
);

function signup() {
console.log(
"Inside Signup method ********************************************"
);
setadditionalInfo("check 1");
console.log(
"all Done Signup methods ********************************************"
);
return;
}

useEffect(() => {
if (prevRoute !== undefined && prevRoute.name === "additionalScreen") {
console.log("Error Check");
prevRoute.params.params.myParam();
}

});

return (



{
navigation.navigate("additionalScreen", {
params: { myParam: signup },
prevState: navigation.state,
});
}}
inputStyle={{ fontSize: 15 }}
//placeholderTextColor="grey"
placeholder=" additional"
//placeholderTextColor="black"
value={additionalInfo}
showSoftInputOnFocus={false}
//disabled

errorStyle={{ color: "red" }}
errorMessage={additionalInfoErrorMessage}
leftIcon={

}
keyboardType="email-address"
/>
{
signup();
}}
style={styles.signUpButton}
>

Sign Up






);
};


Подробнее здесь: https://stackoverflow.com/questions/793 ... -component
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»