3 回答
TA贡献1909条经验 获得超7个赞
或者,将任何通用逻辑分解为一个实用函数,例如SpeechUtil.ts
,一个包含此共享逻辑和每个实用函数的全新文件,并将它们导出。然后,每个组件分别导入它们。这样可以确保如果您更新该逻辑,它会影响两个组件
TA贡献1776条经验 获得超12个赞
你可以使用 React.createRef 来达到这个目的。下面是一个示例代码。
import Speech from './Speech';
type Props = {}
type States = {}
export default class SpeechIOS extends Component<Props, States> {
constructor(props: Props) {
super(props);
this.speech = React.createRef();
}
// render
render() {
...
return (<Speech ref={this.speech} team="1" onSpeechResults={this.onSpeechResults}></Speech>);
}
sayHello() {
console.log("Hello!!");
}
// I want that Speech Component call this onSpeechResults function
onSpeechResults(result: string) {
this.setState({ ...});
let temp = this.speech.current.getMatchedSpell(... ); // which is in Speech Component
this.sendCommand(10, 100 ... ); // which is in Speech Component
this.sayHello(); // which is in SpeechIOS component only
...other things..
};
}
TA贡献1906条经验 获得超3个赞
您应该定义一个顶级组件来定义共享的道具和方法,并使用它们来呈现您的 ios 或 android 组件。把道具和方法传给孩子。这是在反应中优于继承的组合。例子:
class Speech extends React.Component {
state ={shared: 'state'}
sharedMethod = () => {
this.setState({blah: 'blah})
}
render() {
const Root = Platform.select({
ios: SpeechIOS,
android: SpeechAndroid
})
return <Root onClick={this.sharedMethod} shared={this.state.shared}/>
}
}
添加回答
举报