条件渲染&循环渲染&表单&状态提升
react
class Demo extends React.Component {
constructor(prop) {
super();
this.state = {content:[], inputVal:"", demo1prop:1}
}
componentDidMount(){
setTimeout(() => {
this.setState({
content: [1,2,3,4]
})
}, 1000)
}
render(){
const { content, inputVal, demo1prop } = this.state;
const {children , namedChild } = this.props;
return content.length?(
<div>
<input value = {inputVal} onChange = {(e)=>{this.setState({inputVal:e.target.value})}}></input>
<div>受控input的value:{ inputVal }</div>
<div>后台给的内容: {content.map( c => <span key={c}>内容{ c }</span>)}</div>
<div>children:<div>{children}</div>{namedChild}</div>
<Demo1 prop={demo1prop} changePropFn={(value) =>{this.setState({demo1prop:value})}}/>
</div>
):(<React.Fragment>loading...</React.Fragment>)
}
}
function Demo1 (props){
const {prop, changePropFn} = props;
return(<div onClick = {()=>{changePropFn(2)}}>
Demo1内容:{prop}
</div>)
}
ReactDOM.render(
<Demo namedChild="i am named child">i am default child</Demo>,
document.getElementById("app")
);
vue
const Demo = Vue.component("Demo",{
render(){
const {content, inputValue} = this;
return(
content
?<div>
<div>内容:{content.map( c => <span key={c}>内容{ c }</span>)}</div>
<input value = {inputValue} onChange = {(e)=>{this.inputValue=e.target.value;console.log(1)}}></input>
<div>受控input: {inputValue}</div>
</div>
:<span>loading...</span>
)
},
mounted() {
setTimeout(() => {
this.content = [1,2,3,4]
},1000)
},
data(){
return {
content:[],
inputValue:""
}
}
})