Если у вас есть конструктор задач, мы можем извлечь поток из задачи и вызвать thread.abort.
Thread th = null;
Task.Factory.StartNew(() =>
{
th = Thread.CurrentThread;
while (true)
{
Console.WriteLine(DateTime.UtcNow);
}
});
Thread.Sleep(2000);
th.Abort();
Console.ReadKey();
Поскольку вы не предоставили никакого кода. Вот мои мысли по этой проблеме.
Когда вы перечисляете компонент в навигаторе, будь то StackNavigator
или DrawerNavigator
, компонент получит некоторые реквизиты, предоставленные самим классом навигации.
Имеется возможность отправлять больше параметров в качестве реквизита для этих объектов навигации. Среди этих дополнительных параметров может быть ваш единственный метод toggleDrawer()
.
Кроме того, если ваш родительский компонент указан в навигаторе, а дочерний компонент - нет. Вам нужно будет явно передать навигационные реквизиты (this.props.navigation
) на дочерний компонент. Итак, когда вы находитесь внутри этого дочернего компонента, все, что вам нужно сделать, это получить эти реквизиты и вуаля, это сделает нужным!
Надеюсь, что это прояснит вам все.
EDIT --- для вашего третьего комментария
Предположения:
DrawerNavigator({ParentScreen: {screen: ParentScreen}})
<Route/>
ParentScreen
. Итак, что вы можете сделать, это передать навигационные опоры по умолчанию на компонент <Route>
.
Как - <Route navigation={this.props.navigation} />
и в дочернем компоненте вы можете вызвать this.props.navigation.toggleDrawer()
в любом событии onPress()
любого элемента.
Если я правильно понял ваш вопрос, я думаю, вы немного перепутали дело. Пример, который вы показываете, является примером запуска функции родительского компонента из дочернего элемента.
Я попытаюсь немного разобраться с двумя примерами.
1) Триггер от ребенка :
Чтобы вызвать функцию родительского компонента у ребенка, вы можете просто передать функцию как свойство дочернему компоненту и запустить его, когда вам это нужно.
class Parent extends React.Component {
someFunction = (text) => {
console.log('Message from child: ', text);
}
render () {
return(
<Child someProperty={this.someFunction} />
)
}
}
class Child extends React.Component {
_onPress = () => {
// check if the property is defined and not null
if(this.props.someProperty) {
// run the function that is passed from the parent
this.props.someProperty();
}
}
render() {
return(
<Button onPress={this._onPress} title="Click Me"/>
)
}
}
2) Триггер из родителя:
Чтобы вызвать функцию дочернего компонента из родителя, вы можете передать свойство, которое изменяется, когда какое-либо действие происходит на родительском компоненте. Это вызовет повторную визуализацию (в большинстве случаев для получения дополнительной информации см. shouldComponentUpdate
) в дочернем компоненте. Вы можете проверить изменения свойств, а затем сделать то, что вам нужно сделать в дочернем компоненте.
class Parent extends React.Component {
state = {
someParameter: 'someInitialValue',
}
someFunction = (text) => {
this.setState({ someParameter: 'someValue' });
}
render () {
return(
<Child someProperty={this.state.someParameter} />
)
}
}
class Child extends React.Component {
someFunction = (text) => {
console.log('Message from parent: ', text);
}
componentDidUpdate(prevProps, prevState, snapshot) {
// Check if the suplied props is changed
if(prevProps.someProperty !== this.props.someProperty) {
// run the function with the suplied new property
this.someFunction(this.props.someProperty);
}
}
render() {
return(
{/* ... */}
)
}
}
class Parent extends React.Component {
parentFunction() {
this.refs.chid.childFunction(parameterToPassed);
}
render () {
return(
{/* ... */}
<Child ref='child' />
{/* ... */}
)
}
}
class Child extends React.Component {
childFunction(text){
console.log('parameter Passed from parent: ', text);
}
render() {
return(
{/* ... */}
)
}
}
Функция, названная childFunction, объявлена в дочернем компоненте. и вызываемый в родительском компоненте внутри функции parentFunction.
для получения дополнительной информации Вызов дочерней функции из родительского компонента в React Native