Я использую, чтобы столкнуться с той же проблемой. Я заставил свой экран Post
прослушивать событие фокусировки навигации, вызванное react-nativation
здесь вместо componentDidMount
.
import React from 'react';
import { View } from 'react-native';
import { NavigationEvents } from 'react-navigation';
const Post = () => (
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
*/}
);
С помощью onDidFocus
вы можете получить параметр навигации, получить данные и / или обновить состояние. При необходимости вы можете очистить состояние экрана нажатием onDidBlur
.
Кроме того, вы можете сделать императивное кодирование как этот документ здесь
Кстати, мне интересно, почему вы поставили Post
с Drawer? Это просто ссылка в ящике, которая может получить доступ к странице поста?
По моему мнению, вы должны переместить Home
и Post
в новый стек и сделать Home
в качестве начального маршрута. Это обеспечит размонтирование Почты после перехода назад к Home
.
Посмотрите мой образец ниже
const HomeStack = createStackNavigatior({
Home: {screen: Home},
Post: {screen: Post},
}, {
initialRouteName: 'Home',
...
})
const Drawer = createDrawerNavigator(
{
HomeStack
Settings: {screen: Settings}
},
{
initialRouteName: "HomeStack",
backBehavior: 'initialRoute',
contentOptions: {
activeTintColor: "#e91e63"
},
contentComponent: props => ,
}
);
Я не извел бы с NameScopes и т.д. и буду скорее использовать Раскадровку. SetTarget вместо этого.
var b = new Button() { Content = "abcd" };
stack.Children.Add(b);
var fade = new DoubleAnimation()
{
From = 0,
To = 1,
Duration = TimeSpan.FromSeconds(5),
};
Storyboard.SetTarget(fade, b);
Storyboard.SetTargetProperty(fade, new PropertyPath(Button.OpacityProperty));
var sb = new Storyboard();
sb.Children.Add(fade);
sb.Begin();
Я соглашаюсь, namescopes являются, вероятно, неправильной вещью использовать для этого сценария. Намного более простой и легкий для использования SetTarget, а не SetTargetName.
В случае, если это помогает кому-либо еще, вот то, что я раньше выделял конкретную ячейку в таблице с выделением, которое не затухает ни к чему. Это немного похоже на выделение StackOverflow, когда Вы добавляете новый ответ.
TableCell cell = table.RowGroups[0].Rows[row].Cells[col];
// The cell contains just one paragraph; it is the first block
Paragraph p = (Paragraph)cell.Blocks.FirstBlock;
// Animate the paragraph: fade the background from Yellow to White,
// once, through a span of 6 seconds.
SolidColorBrush brush = new SolidColorBrush(Colors.Yellow);
p.Background = brush;
ColorAnimation ca1 = new ColorAnimation()
{
From = Colors.Yellow,
To = Colors.White,
Duration = new Duration(TimeSpan.FromSeconds(6.0)),
RepeatBehavior = new RepeatBehavior(1),
AutoReverse = false,
};
brush.BeginAnimation(SolidColorBrush.ColorProperty, ca1);
Я решил проблему, используя этот параметр в качестве параметра в методе begin, попробуйте:
sb.Begin(this);
Поскольку имя зарегистрировано в окне.