Запустить функцию, находящуюся внутри дочернего компонента от родительского

Если у вас есть конструктор задач, мы можем извлечь поток из задачи и вызвать thread.abort.

Thread th = null;

Task.Factory.StartNew(() =>
{
    th = Thread.CurrentThread;

    while (true)
    {
        Console.WriteLine(DateTime.UtcNow);
    }
});

Thread.Sleep(2000);
th.Abort();
Console.ReadKey();
0
задан bennygenel 13 July 2018 в 09:51
поделиться

3 ответа

Поскольку вы не предоставили никакого кода. Вот мои мысли по этой проблеме.

Когда вы перечисляете компонент в навигаторе, будь то StackNavigator или DrawerNavigator, компонент получит некоторые реквизиты, предоставленные самим классом навигации.

Имеется возможность отправлять больше параметров в качестве реквизита для этих объектов навигации. Среди этих дополнительных параметров может быть ваш единственный метод toggleDrawer().

Кроме того, если ваш родительский компонент указан в навигаторе, а дочерний компонент - нет. Вам нужно будет явно передать навигационные реквизиты (this.props.navigation) на дочерний компонент. Итак, когда вы находитесь внутри этого дочернего компонента, все, что вам нужно сделать, это получить эти реквизиты и вуаля, это сделает нужным!

Надеюсь, что это прояснит вам все.

EDIT --- для вашего третьего комментария

Предположения:

  1. Родительский компонент указан как DrawerNavigator({ParentScreen: {screen: ParentScreen}})
  2. В компоненте <Route/> ParentScreen.

Итак, что вы можете сделать, это передать навигационные опоры по умолчанию на компонент <Route>.

Как - <Route navigation={this.props.navigation} /> и в дочернем компоненте вы можете вызвать this.props.navigation.toggleDrawer() в любом событии onPress() любого элемента.

0
ответ дан Aseem Upadhyay 17 August 2018 в 13:16
поделиться
  • 1
    Можете ли вы показать небольшой пример, пожалуйста? – John 13 July 2018 в 10:03
  • 2
    пример для чего? в ответе есть несколько вещей – Aseem Upadhyay 13 July 2018 в 10:03
  • 3
    Я этого не понимаю. Скажем, вы создали дочерний 'Router' и использовали его внутри родителя как & lt; Router / & gt ;, как вы можете отправить из самого родителя his.props.navigation.toggleDrawer (); уволить его у ребенка – John 13 July 2018 в 10:05

Если я правильно понял ваш вопрос, я думаю, вы немного перепутали дело. Пример, который вы показываете, является примером запуска функции родительского компонента из дочернего элемента.

Я попытаюсь немного разобраться с двумя примерами.

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(
      {/* ... */}
    )
  }
}
1
ответ дан bennygenel 17 August 2018 в 13:16
поделиться
  • 1
    Привет bennygenel и спасибо вам второй (Trigger from parent), но что вы можете использовать вместо setState ?? – John 13 July 2018 в 10:12
  • 2
    Внутри моего родителя будет только & lt; Child / & gt; а не & lt; Child someProperty = {this.state.someParameter} / & gt; – John 13 July 2018 в 10:13
  • 3
    человек, которого вы набираете быстрее; p @bennygenel – Aseem Upadhyay 13 July 2018 в 10:14
  • 4
    @John Мое намерение состояло в том, чтобы объяснить вам логику / поток данных, так как вы просите гипотетический проект, который вам нужно, чтобы понять остальное для себя, я боюсь. Если вы застряли на нем, когда придете к этому моменту, вы можете задать более конкретный вопрос. Поскольку вы спросили меня, я постараюсь ответить на ваш вопрос. Почему бы не пройти какой-либо параметр? Ваш код находится под вашим контролем. Вы можете передать параметр, если вам нужно. – bennygenel 13 July 2018 в 10:27
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

0
ответ дан Samiksha Jagtap 17 August 2018 в 13:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: