Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

父组件如何引用子组件的方法? #610

Closed
ldwonday opened this issue Sep 12, 2018 · 7 comments
Closed

父组件如何引用子组件的方法? #610

ldwonday opened this issue Sep 12, 2018 · 7 comments

Comments

@ldwonday
Copy link

最新在用Taro,遇到了不少问题
1、webpack watch的时候经常漏掉model,这个可能和dva有关系,删掉dist,重新编译就是好的。
2、app.js中写的自定义方法,在别的地方调用不了,Taro.getApp()里面有没有自定义的方法。
3、自定义组件也是,父组件引用不了子组件内部的方法,除非这个方法在jsx中被用到了,没有用到的是找不到的。例如this.$scope.selectComponent('#packet')获取到自定义组件后发现里面并没有自定义的方法,但是子组件如果jsx中用到的方法能找到。

@yuche
Copy link
Contributor

yuche commented Sep 12, 2018

selectComponent 拿到的是小程序的组件实例,Taro 的实例你可以通过 ref 拿到。

@ldwonday
Copy link
Author

@yuche 都试过了,都拿不到!

@luckyadam
Copy link
Member

你的 Taro 版本多少

@ldwonday
Copy link
Author

ldwonday commented Sep 12, 2018

@luckyadam 最新版beta26,

import Taro, { Component } from '@tarojs/taro'
import { Provider } from '@tarojs/redux'
import '@tarojs/async-await'
import Index from './routes/article'
import dva from './dva'
import models from './model'
import action from './utils/action'
import './app.scss'

const dvaApp = dva.createApp({
  initialState: {},
  models,
  onError(e, dispatch) {
    dispatch(action('sys/error', e))
  },
})
const store = dvaApp.getStore()

class App extends Component {
  config = {
    pages: [
      'routes/article/index',
      'routes/detail/index',
      'routes/cash/index',
      'routes/favourites/index',
      'routes/survey/index',
      'routes/survey/detail/index',
    ],
    window: {
      backgroundTextStyle: 'light',
      navigationBarBackgroundColor: '#d89',
      navigationBarTitleText: '每天趣闻',
      navigationBarTextStyle: 'white',
      navigationStyle: 'custom',
    },
    plugins: {
      tencentvideo: {
        version: '1.1.8',
        provider: 'wxa75efa648b60994b',
      },
    },
  }

 byTestMethod() {
}

  byGetUserInfo = (e, cb) => {
  }

  componentDidMount = () => {
    dvaApp.dispatch(action('app/init'))
  }

  render() {
    return (
      <Provider store={store}>
        <Index />
      </Provider>
    )
  }
}

Taro.render(dvaApp.start(<App />), document.getElementById('app'))

这样子是在Taro.getApp()中可以拿到byGetUserInfo,但是拿不到byTestMethod方法。

另外自定义组件,父组件引用子组件的话两种方式,一种ref一种selectComponent,如果是ref那么和Taro.getApp一样,需要方法以属性的方式定义,如果是selectComponent,那么这个方法都拿不到,除非在jsx中引入了这个方法,比如click事件调用等等,jsx中没有引入的不会出现在selectComponent后的组件对象里!
是必须方法要以属性的方式定义吗?

@gclsoft
Copy link

gclsoft commented Dec 13, 2018

@ldwonday 请问解决了吗?

@shenghanqin
Copy link
Collaborator

@ldwonday 请试用最新版,看还有这个问题吗?
我平常都是用ref来获取子组件的方法的。

@taro-bot
Copy link

taro-bot bot commented Dec 8, 2019

Hello~

您的问题楼上已经有了确切的回答,如果没有更多的问题这个 issue 将在 15 天后被自动关闭。

如果您在这 15 天中更新更多信息自动关闭的流程会自动取消,如有其他问题也可以发起新的 Issue。

Good luck and happy coding~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants