Dva: 父组件如何调用子组件的方法?

Created on 10 May 2017  ·  9Comments  ·  Source: dvajs/dva

我做的是一个stateless父组件,包含一个按钮(button)和一个画板(用export default class实现),现在我想实现,点击按钮,能调用到画板的clear()方法,应该如何弄。。

All 9 comments

dispatch action 改变state状态,clear 画板,redux都是单向的数据流,所有的操作都经过store

@Menq 如果父组件没有connect呢,那么就不能dispatch,此时改如何去调用子组件的方法呢

这样做与redux的思想不符合,所以你会觉得做不了。
还有就是父组件没有connect, dispatch 可以由更上层传过来,如果整个上层都没有,说明你做错了。
其他实现方法不推荐,do it in a react way

@Menq dispatch可以改变画板的一个state,state改变之后,可以由什么方式触发画板清空呢。。

@zzl1787 准确的说是改变props, props 的改变会触发一系列的渲染函数,componentWillUpdate, componentDidUpdate, render, 可以根据状态变化在componentDidUpdate 执行clear() 方法。
http://reactjs.cn/react/docs/component-specs.html

@Menq 其实还有一种变通得的方法,this.refs.getInstance.dispatchProps.dispatch(action) 通过子组件的实例去获取它的dispatch,然后去发送action,从而达到父组件触发事件,然后子组件相应的效果!

@Menq 如果要用生命周期,或者 ref,就表示没有在 stateless component 范围内的解法咯?

@zheeeng 当然了

https://github.com/reduxjs/react-redux/issues/1291#issuecomment-494188070
这里有解决方案
导出的时候加上{ withRef: true }属性
connect(
(state) => {
return {
...state.materials
};
},
undefined,
undefined,
{ withRef: true }
)(Index);

使用的时候

this.ref.getWrappedInstance() 这里就是你的自组件了

Was this page helpful?
0 / 5 - 0 ratings