Если вы читаете PEP 263 , он четко говорит:
Чтобы определить кодировку исходного кода, магический комментарий должен быть помещен в исходные файлы либо как первый или вторая строка в файле ...
blockquote>(Исходное предложение сказало, что оно должно быть первой строкой после # !, если оно есть, но, по-видимому, оказалось, что было проще реализовать с правило «первая или вторая строка».)
Фактические справочные документы описывают одно и то же, менее дружественным, но более строгим способом, для 3.3 и 2.7 .
«Магический комментарий», который появляется позже в файле, не является волшебным, это просто комментарий, который вводит вас в заблуждение, не затрагивая компилятор Python.
UTF-8 для
u'哈哈'
-'\xe5\x93\x88\xe5\x93\x88'
, поэтому это байты в файле. В последних версиях Python (включая 2.7 и все 3.x) кодировка по умолчанию всегда ASCII, если файл не начинается с спецификации UTF (как это делают некоторые редакторы Microsoft); даже в 2.3-2.6 это обычно ASCII; в более ранних версиях это латинский-1. Пытаться интерпретировать'\xe5\x93\x88\xe5\x93\x88'
не удастся с точным исключением, которое вы видели.
В этом случае вам необходимо прослушать NavigationEvents , потому что компоненты уже смонтированы, но didFocus будет вызываться каждый раз, когда представление получает фокус.
Вот пример кода из документов:
import React from 'react';
import { View } from 'react-native';
import { NavigationEvents } from 'react-navigation';
const MyScreen = () => (
<View>
<NavigationEvents
onWillFocus={payload => console.log('will focus',payload)}
onDidFocus={payload => console.log('did focus',payload)}
onWillBlur={payload => console.log('will blur',payload)}
onDidBlur={payload => console.log('did blur',payload)}
/>
{/*
Your view code
*/}
</View>
);
export default MyScreen;
Переход назад из стека C в стек B не вызовет componentDidMount (), так как компоненты были уже смонтированы при создании стека B.
, который вы можете сделать, это сбросить стек навигации при переходе из стека B в стек C, как показано ниже.
const stackCAction = StackActions.reset({
index: 0,
actions: [NavigationActions.navigate({ routeName: 'StackC' })],
});
диспетчеризация с пометкой
this.props.navigation.dispatch(stackCAction);
, возвращаясь назад, сделать это невозможно.
поочередно вы можете передать функцию обратного вызова из стека B в стек C для обновления.
Проверьте эту ссылку для полного ответа.
Это то, что делает стековый навигатор, он хочет снова загрузить весь экран.
Он просто хранит все для вас, так что когда вы вернетесь назад, все будет там, в каком бы состоянии вы не покинули экран.
Например, вы прокрутили наполовину на определенном экране и перешли на другой экран, теперь вы вернулись, и вы увидите, что ваш экран наполовину прокручен там, где вы оставили.
так что ничего не поделаешь, когда ты вернешься.
Примечание: Если экран перемещался в прошлом и существует в текущем стеке, то переход к экрану снова не вызовет никаких методов жизненного цикла.
Итак, для вашего случая,
вы можете передать ссылку на метод в навигационные параметры. и позвоните, прежде чем начать навигацию.
вот так,
скажем, вы находитесь в screenB и хотите вызвать метод methodSuperCool=()=>{...}
, который находится в screenA
, из которого вы перешли на текущий экран.
для этого вам нужно будет передать ссылку на метод в параметрах при переходе к screenB с экрана A.
this.props.navigation.navigate('screenB',{methodSuperCool:this.methodSuperCool});
//this to be write in screenA
сейчас на экране B, прежде чем вы перейдете к экрану, вызовите это,
this.props.navigation.state.params.methodSuperCool() // this can also have params if you like to pass
this.props.navigation.navigate('screenA') // or goBack() method will also work