为了账号安全,请及时绑定邮箱和手机立即绑定

React 可选择性的使用自有 state 或者 props 元件

React 可选择性的使用自有 state 或者 props 元件

慕勒3428872 2019-05-12 09:29:05
我想做一个如果有props有value传入,就使用props的value,没有传入的话,就使用自有状态的元件代码如下DEMO:https://stackblitz.com/edit/r...importReactfrom'react';exportdefaultclassMyInputextendsReact.Component{constructor(props){super(props);this.state={value:(typeofthis.props.value==='string')?this.props.value:''}}componentWillReceiveProps(nextProps){if((typeofthis.props.value==='string')?this.props.value:''){this.setState({value:nextProps.value})}}handleChange=(e)=>{if(this.props.onChange){this.props.onChange(e);}else{this.setState({value:e.target.value});}}handleClick=(e)=>{if(this.props.onClick){this.props.onClick(e);}else{}}render(){return}}但我认为这样的代码有点冗长,似乎考虑不周,请问有没有这种元件的比较好的写法可以推荐呢?
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

首先,不要在constructor()方法中,使用this.props,这个写法在IE下无法兼容。
其次,componentWillReceiveProps()方法,将会废弃。
可以做如下的修改:
render(){
const{value=this.state.value}=this.props;
return
}
你的需求是项目中最常见的使用方式:
importReactfrom'react';
exportdefaultclassMyInputextendsReact.Component{
constructor(props){
super(props);
this.state={value:''};
}
handleChange=(e)=>{
if(this.props.onChange){
this.props.onChange(e);
}else{
this.setState({value:e.target.value});
}
}
handleClick=(e)=>{
if(this.props.onClick){
this.props.onClick(e);
}else{
}
}
render(){
const{value=this.state.value}=this.props;
return
}
}
                            
查看完整回答
反对 回复 2019-05-12
  • 2 回答
  • 0 关注
  • 442 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信