網站首頁 編程語言 正文
React事件監聽和State狀態修改
on*函數可直接使用,但只能使用在html標簽上,自己創建的組件標簽不可
組件可以增加state狀態,修改用setState方法,修改會有緩存,只能保證在渲染到頁面之前會改好。所以setState后立馬去使用值可能是不對的
狗子組件1:點擊會打印bark和run
class Dog extends Component {
? bark () {
? ? console.log('bark')
? }
??
? run () {
? ? console.log('run')
? }
??
? render () {
? ? return (<div onClick={
? ? //有兩個方法需要實現,所以用一個函數進行封裝
? ? ? ()=>{
? ? ? ? this.bark();
? ? ? ? this.run();
? ? ? }
? ? }>DOG</div>)
? ? }
}
ReactDOM.render(<Dog/>,document.querySelector('#root'));
狗子組件2:增加bark和run狀態,開始為false,點擊變成true,1s后還原成false?
class Dog extends Component {
constructor () {
super()
this.state={
bark:false,
run:false
}
}
clickYeah () {
this.setState({
bark: true,
run: true
})
//因為setState會有緩存,值后面才會變,所以這里打印出來還是false
console.log('bark'+this.state.bark);
console.log('run'+this.state.run);
setTimeout(()=>{
//1s之后將值改回成false,所以這里打印出來還是false。如果想要檢驗前面修改成true有沒有生效,可以將這里setState修改成false的步驟先注釋掉
this.setState({
bark: false,
run: false
})
console.log('bark'+this.state.bark+'run'+this.state.run);
},1000)
}
render () {
return (<div onClick={this.clickYeah.bind(this)}>DOG</div>)
}
}
ReactDOM.render(<Dog/>,document.querySelector('#root'));
React事件監聽相關例子
var TestClickComponent = React.creatsClass({
handleClick: function(event){
//操作DOM節點
var msg = React.findDOMNode(this.refs.tip);
if(msg.style.display === 'none'){
msg.style.display = 'inline';
}else{
msg.style.display = 'none';
}
//阻止事件的冒泡和默認行為
event.stopPropagation();
event.preventDefault();
},
render: function(){
return(
<div>
<button onClick={this.handleClick}>顯示/隱藏</button>
<span ref="tip">message</span>
</div>
);
}
});
var TestInputComponent = React.createClass({
getInitialState: function(){
return{
inputContent: ' '
}
},
changeHandler:function(event){
//改變state的值
this.setState({
inputContent:event,target.value
});
event.preventDefault();
event.stopPropagation();
},
render: function(){
return(
<div>
<input type="text" onChange={this.changeHandler}/>
<span>{this.state.inputContent}</span>
</div>
);
}
});
原文鏈接:https://blog.csdn.net/qq_40029828/article/details/106040837
相關推薦
- 2022-07-22 mybatis一級緩存和二級緩存理解與區別
- 2022-03-15 has been blocked by CORS policy: Response to prefl
- 2022-10-02 SQL堆疊注入簡介_MsSql
- 2022-03-27 深入理解React?State?原理_React
- 2022-06-16 Kotlin操作符重載實例詳解_Android
- 2022-03-23 Asp.Net?Core?使用Monaco?Editor?實現代碼編輯器功能_實用技巧
- 2022-08-19 python模塊和函數幫助文檔快速查看方法示例_python
- 2024-01-16 URLClassLoader詳解
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支