首页 > 解决方案 > 未捕获的类型错误:tweets.push 不是函数

问题描述

我是 javascript 的新手,我一直在关注视频教程,最终得到了这个错误 Uncaught TypeError: tweets.push is not a function at addTweetLocalStorage (tweet.js:45)。我坚持下去,我不知道我做错了什么,因为我写了那个人在视频中写的确切代码

    //variables 
    const tweet_list = document.querySelector('#tweet_list')

    eventListeners();
    //eventlisteners

    // form submission
    function eventListeners(){
        document.querySelector('#form').addEventListener('submit', newTweet);
        //remove tweet
        tweet_list.addEventListener('click',removeTweet);
    }

    //functions
    function newTweet(e){
        e.preventDefault();
        //read the textarea value
        const text = document.querySelector('#text').value;

        //create the remove button
        const removeBtn= document.createElement('a');
        removeBtn.classList='remove';
        removeBtn.textContent='x';

        //create an <li> document
        const li=document.createElement('li');
        li.textContent=text;

        li.appendChild(removeBtn);
        tweet_list.appendChild(li);

        addTweetLocalStorage(text);
    }

    function removeTweet(e){
        if (e.target.classList.contains('remove')) {
            e.target.parentElement.remove();
        }
    } 

    //add tweet to local storage
    function  addTweetLocalStorage(text){
        let tweets = getTweetsFromStorage();
        tweets.push(text);

        //convert tweet array into string 
        localStorage.setItem('tweets', JSON.stringify('tweets'));
    }
    function getTweetsFromStorage(){
        let tweets;
        const tweetsLS = localStorage.getItem('tweets');
        if (tweetsLS === null) {
            tweets = [];
        }
        else {
            tweets=JSON.parse(tweetsLS);
        }
        return tweets;
    }

标签: javascriptecmascript-6

解决方案


现在您的'tweets'存储项目实际上是字符串'tweets',而'tweets'.push不是函数。

localStorage.setItem('tweets', JSON.stringify('tweets'));

应该

localStorage.setItem('tweets', JSON.stringify(tweets));

并且您必须从本地存储中删除当前的字符串项目,并从没有项目开始。


推荐阅读