Fra*_*nel 2 javascript reactjs react-native react-native-router-flux
是否可以发布和订阅事件(如离子)以进行组件通信。我拥有的两个组件没有关联(没有父组件和子组件)。\n一个组件是一个带有按钮 Publish 的标题,另一个组件是一个表单。我想要的是将事件从单击的按钮发送到表单以进行验证,例如字段正文不能为空之类的内容。
\n\n编辑:\n我正在使用路由器通量。我的表单组件是NewPost,带有按钮发布的组件是ButtonsNewPost。该组件是父组件还是子组件?他们能以某种方式沟通吗?
\n\n <Scene\n key="newPost"\n component={NewPost}\n hideNavBar={false}\n renderRightButton={<ButtonsNewPost/>}\n navBarButtonColor=\'#fff\'\n >\nRun Code Online (Sandbox Code Playgroud)\n\n解决方案:
\n\nnewPost.js
\n\ncomponentWillReceiveProps(newProps) {\n let validationMessage;\n if(newProps.validationBody) {\n validationMessage = \'El campo descripci\xc3\xb3n es requerido\';\n this.showToastValidation(validationMessage);\n\n //without the next line the validation toast only appear once\n this.props.validation_body(false); \n } \n\n}\n\nconst mapStateToProps = state => {\n return {\n validationBody: state.validationBody\n }\n}\n\nconst mapDispatchToProps = dispatch => {\n return {\n validation_body: (validationBody) => \n dispatch(validation_body(validationBody))\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(NewPost)\nRun Code Online (Sandbox Code Playgroud)\n\n减速器/validationBody.js
\n\nexport default (state = false, action) => {\n switch(action.type) {\n case \'validation_body\':\n return action.payload\n default:\n return state\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n减速器/index.js
\n\nimport validationBody from \'./validationBody\';\n\nexport default combineReducers({\n validationBody: validationBody\n})\nRun Code Online (Sandbox Code Playgroud)\n\n动作/index.js
\n\nexport const validation_body = (validationBody) => {\n return {\n type: \'validation_body\',\n payload: validationBody\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n按钮NewPost.js
\n\nif (!window.description) {\n this.props.validation_body(true);\n return;\n}\n\nconst mapDispatchToProps = dispatch => {\n return {\n validation_body: (validationBody) => \n dispatch(validation_body(validationBody)),\n }\n}\n\nexport default connect(null, mapDispatchToProps)(ButtonsNewPost)\nRun Code Online (Sandbox Code Playgroud)\n
您可以使用react-native-event-listeners库:
https://github.com/meinto/react-native-event-listeners
用法与 Ionic 事件类似:
import { EventRegister } from 'react-native-event-listeners'
/*
* RECEIVER COMPONENT
*/
class Receiver extends PureComponent {
constructor(props) {
super(props)
this.state = {
data: 'no data',
}
}
componentWillMount() {
this.listener = EventRegister.addEventListener('myCustomEvent', (data) => {
this.setState({
data,
})
})
}
componentWillUnmount() {
EventRegister.removeEventListener(this.listener)
}
render() {
return <Text>{this.state.data}</Text>
}
}
/*
* SENDER COMPONENT
*/
const Sender = (props) => (
<TouchableHighlight
onPress={() => {
EventRegister.emit('myCustomEvent', 'it works!!!')
})
><Text>Send Event</Text></TouchableHighlight>
)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7876 次 |
| 最近记录: |