Я столкнулся со своеобразным сценарием, который я не могу понять.
У меня есть экран регистрации (функциональный компонент) и экран дополнительной информации (функциональный компонент) в навигаторе стека.
На экране регистрации У меня есть метод, который обновляет значение поля ввода текста при нажатии кнопки регистрации. Метод представлен ниже (Для простоты удален нежелательный код).
Когда я нажимаю кнопку регистрации на том же экране (экран регистрации), я вижу, что вызывается метод регистрации, который обновляет строку. чтобы Проверить 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
Состояние React Native Set не работает внутри пользовательского метода (функциональный компонент) ⇐ Javascript
Форум по Javascript
1737162600
Anonymous
Я столкнулся со своеобразным сценарием, который я не могу понять.
У меня есть экран регистрации (функциональный компонент) и экран дополнительной информации (функциональный компонент) в навигаторе стека.
На экране регистрации У меня есть метод, который обновляет значение поля ввода текста при нажатии кнопки регистрации. Метод представлен ниже ([b]Для простоты удален нежелательный код[/b]).
Когда я нажимаю кнопку регистрации на том же экране (экран регистрации), я вижу, что вызывается метод регистрации, который обновляет строку. чтобы [b]Проверить 1[/b], а также отражается в поле ввода, проблем нет... Но когда я перехожу к следующему экрану (экран дополнительной информации), передав этот метод как одно из свойств в объекте навигации и вызовите тот же метод с этого экрана, используя навигацию props, я вижу, что вызывается тот же метод, но состояние строки не меняется на [b]Check 1[/b] . Ниже блок кода, который я использовал для вызова метода регистрации с другого экрана.
**
// 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);
**
Еще одна вещь, которую я заметил в журналах: когда метод регистрации вызывается на том же экране (экран регистрации), строка ниже журнала не печатается.
[b] console.log("Внутренний экран регистрации");[/b] Но когда он вызывается как свойство с другого экрана, эта строка отображается в консоли сразу после выполнения этого метода, что, я думаю, и является причиной проблемы. Может кто-нибудь объяснить, почему это не работает.
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
);
};
Подробнее здесь: [url]https://stackoverflow.com/questions/79366422/react-native-set-state-not-working-inside-custom-method-functional-component[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия