我正在嘗試為 vue 3 重寫一個元件,更具體地說,使用他們的新設定腳本,以便程式碼看起來更簡潔,這是當前的樣子。
export default { name: "typeWriter", data: () => { return { typeValue: "", typeStatus: false, displayTextArray: ['Art', 'Science', 'Math', 'Everything'], typingSpeed: 70, erasingSpeed: 70, newTextDelay: 1000, displayTextArrayIndex: 0, charIndex: 0, }; }, created() { setTimeout(this.typeText, this.newTextDelay + 200); }, methods: { typeText() { if (this.charIndex < this.displayTextArray[this.displayTextArrayIndex].length) { if (!this.typeStatus) { this.typeStatus = true; } this.typeValue += this.displayTextArray[this.displayTextArrayIndex].charAt(this.charIndex); this.charIndex++; setTimeout(this.typeText, this.typingSpeed); } else { this.typeStatus = false; // stop the typing once we hit the last thing we wish to type. if (this.displayTextArrayIndex + 1 >= this.displayTextArray.length) { return } setTimeout(this.eraseText, this.newTextDelay); } }, eraseText() { if (this.charIndex > 0) { if (!this.typeStatus) { this.typeStatus = true; } this.typeValue = this.displayTextArray[this.displayTextArrayIndex].substring(0, this.charIndex - 1); this.charIndex -= 1; setTimeout(this.eraseText, this.erasingSpeed); } else { this.typeStatus = false; this.displayTextArrayIndex++; setTimeout(this.typeText, this.typingSpeed + 1000); } }, }, };
這是使用
let typeValue = "" let typeStatus = false let displayTextArray = ['Art', 'Science', 'Math', 'Everything'] let typingSpeed = 70 let erasingSpeed = 70 let newTextDelay = 1000 let displayTextArrayIndex = 0 let charIndex = 0 setTimeout(typeText, newTextDelay); function typeText() { if (charIndex < displayTextArray[displayTextArrayIndex].length) { if (!typeStatus) { typeStatus = true; } typeValue += displayTextArray[displayTextArrayIndex].charAt(charIndex); charIndex++; setTimeout(typeText, typingSpeed); } else { typeStatus = false; // stop the typing once we hit the last thing we wish to type. if (displayTextArrayIndex + 1 >= displayTextArray.length) { return } setTimeout(eraseText, newTextDelay); } } function eraseText() { if (charIndex > 0) { if (!typeStatus) { typeStatus = true; } typeValue = displayTextArray[displayTextArrayIndex].substring(0, charIndex - 1); charIndex -= 1; setTimeout(eraseText, erasingSpeed); } else { typeStatus = false; displayTextArrayIndex++; setTimeout(typeText, typingSpeed + 1000); } }
我遇到的問題是,vue 2 程式碼會使用typeValue
中的值正確更新div,新的vue 3 程式碼不會更新div,我新增了一個console .log,可以看到程式碼確實正在觸發並工作,div 只是沒有識別typeValue
中的這種變化,我完全不明白為什麼會這樣。
我還是 vue 3 的新手,所以也許我錯過了一些東西,但這對我來說看起來很正確,所以我不明白為什麼 div 沒有像以前那樣更新。
嘗試使用
ref
使資料具有反應性一个>: