nextjs-router

#如何使用Next.js路由器 学习如何使用next/router包来控制Next.js中的路由 在使用Link连接两个页面的Next.js上,我们看到了如何使用Link组件在Next.js应用中声明式地处理路由。 在JSX中管理路由非常方便,但有时您需要以编程方式触发路由更改。 在这种情况下,您可以直接访问Next.js的路由器,它位于next/router包中,并调用其push()方法。 下面是访问路由器的示例: import { useRouter } from 'next/router' export default () => { const router = useRouter() //... } 通过调用useRouter()来获取路由器对象之后,我们可以使用它的方法。 这是客户端路由器,因此方法应仅在前端代码中使用。最简单的方法是将调用包装在useEffect() React钩子中,或者在React有状态组件中的componendDidMount()内部。 您最常使用的是push()和prefetch()。 push()允许我们以编程方式触发URL更改,如前端代码所示: router.push('/login') prefetch()允许我们以编程方式预取URL,在没有自动处理预取的Link标签时非常有用,如下所示: router.prefetch('/login') 完整示例: import { useRouter } from 'next/router' export default () => { const router = useRouter() useEffect(() => { router.prefetch('/login') }) } 您还可以使用路由器来监听路由变更事件。

Node.js 核心模塊

Node.js 提供了一系列的核心模塊,這些模塊是 Node.js 平臺的一部分,並與 Node.js 安裝一同提供。 以下是其中一些模塊的詳細資訊: 名稱 描述 assert 提供一組有用於測試的斷言函數 buffer 提供處理包含二進制數據的緩衝區的能力 child_process 提供生成子進程的能力 console 提供簡單的調試控制台 cluster 允許將一個 Node.js 進程分為多個工作進程,以充分利用多核系統 crypto 提供加密功能 dgram 提供 UDP 數據報插座的實現 dns 提供名稱解析和 DNS 查詢 events 提供管理事件的 API fs 提供與文件系統交互的 API http 提供 HTTP 客戶端/服務器的實現 http2 提供 HTTP/2 客戶端/服務器的實現 https 提供 HTTPS 客戶端/服務器的實現 net 提供異步網絡 API os 提供與操作系統相關的實用方法和屬性 path 提供處理文件和目錄路徑的實用工具 perf_hooks 用於啟用性能指標的收集 process 提供關於當前 Node.js 進程的信息和控制 querystring 提供解析和格式化 URL 查詢字符串的實用工具 readline 提供從可讀流中讀取數據的界面 repl 提供獨立程序或可包含在其他應用中的 REPL(Read-Eval-Print-Loop)實現 stream 用於處理流式數據的抽象接口 string_decoder 提供將緩衝區對象解碼為字符串的 API timers 提供調度在未來某個時間點調用函數的功能 tls 提供 Transport Layer Security(TLS)和 Secure Socket Layer(SSL)協議的實現 tty 提供在文本終端中進行 I/O 操作的功能 url 提供 URL 解析和解析的實用工具 util 支持 Node....

programmer-degree

我需要持有學位才能成為程式設計師嗎? 不需要。我有一個學位,可以肯定地說持有學位不是成為程式設計師的先決條件。 沒有人向我要求證明這一點。 儘管如此,獲得一份工作可能需要學位。某些工作申請可能要求學位,因為這有助於過濾大量的應聘者,而不是因為學位代表能力。學位可以代表能力,但對我個人而言,它只表示這個人有機會去花3-5年的時間獲得學位,並且有意願去完成它。這並不意味著他們比其他人更聰明。 我持有學位的事實意味著很多。我不是優秀的學生,甚至從來都不是。在高中時,我曾經重修兩年,但某個時刻,我決定我只想要一個電腦工程學位,因為我擅長電腦,你懂的。 儘管這讓我付出了很多痛苦,因為80%的考試甚至與電腦無關。那是數學、物理、統計學、數學和更多的數學。 我房間裡的學位證書並不代表我是一個好的程式設計師。相距甚遠。 我的班上有一半的人甚至在課堂外都不自主地編程。 如果你沒有自學的意願,即使你有計算機科學學位,你也永遠不會成為一名程式設計師。 世界上沒有哪所學校能比你用一本好書、一門好課程和強烈的學習意願教得更好。以及數千個小心翼翼的練習時間。 程式設計很棒,因為沒有門檻。 例如,我不能一天早上醒來說“我想在3年內成為一個優秀的醫生”。或許我可以,然後再回到學校等,但我無法僅僅通過自學和進行實驗就成為一個真正的醫生,對吧? 這也適用於律師和許多其他職業。 我明天可以醒來然後決定成為一名專業廚師,但也許如果我沒有上適當的學校,沒有人會在一家很棒的餐廳雇用我。但我可以開自己的餐廳,做出自己最好的菜。 這就是開始從事程式設計自由工作的一個好比喻。 你不需要任何學位來做這件事。你需要的是辛勤工作。辛勤工作和堅持。堅持下去。這是成為優秀的唯一方法。 閱讀盡可能多的書。但永遠不要認為你永遠不會像X一樣出色,只因為他們有學位。這並不意味著什麼。也許他們的前5年都在一個沒有挑戰性的環境中工作,他們會忘記所有學到的東西。 有些人報讀計算機科學學位是因為這個領域有錢賺,或者很容易找到工作。但是程式設計很難,需要不斷學習才能在這些年里保持相關性。也許他們沒有像你一樣的熱情。也許他們五年前有這種熱情,但現在因為辦公室政治而失去了。或者他們進入了一個不好的專業領域,像是嵌入式編程,而他們真正想做的是製作遊戲。 總結一下:成為一名程式設計師需要學位嗎?不需要。

programming-math

需要懂數學才能做程式設計嗎? 不一定需要。即使在學校的數學成績不好,你仍然可以成為一個優秀的程式設計師。 我自己從事程式設計已經有20年了,從來沒有因為忘記需要的數學知識而去翻數學書。我在高中和大學時學習了很多數學,那些內容非常高深抽象,甚至我現在都忘記了學習的目標是什麼(除了通過考試)。 有一種普遍的觀點是,要成為一個優秀的程式設計師,你必須擁有出色的數學能力。這種觀點可能是因為最早從事計算機編程的人大多數是數學家,主要是因為當時還沒有“計算機編程師”的專業學校。當然,計算機科學或計算機工程專業涉及許多數學知識,但這些對實際應用來說並非必須。計算機科學學位中90%的內容都是非常有趣但鮮有實用價值的。你需要數學來理解底層理論,但在日常編程中並不是必需的。 我的論點基本上是針對網頁開發這個領域而言。當然,有些編程工作需要數學。例如,在三維渲染引擎、地理信息系統應用、密碼學/區塊鏈/人工智能/機器學習等領域工作所需的數學知識肯定是很多的,但這些都是非常特定的數學知識,並不是在學校裡教授的。任何涉及底層圖形或遊戲編程的工作也需要數學知識,你需要在嘗試進行這方面工作之前先學習相應的數學知識。數學也對理解算法的複雜度有所幫助,但在最初幾年的編程中,你不太可能需要創造出新的算法。 然而,你需要擅長解決問題。我認為學校數學教育教會你如何解決問題,但其他愛好,比如玩數獨也同樣能訓練你解決問題的能力。 當然,你需要掌握一些基本的數學概念,如微積分、代數和邏輯,但只是一些基礎知識罷了。你不需要了解複數、概率、方程、圖形、指數與對數、極限、導數、積分、微分方程等任何複雜的知識。 不要聽信那些門戶守衛的話:如果他們告訴你因為數學不好,你就不能成為程式設計師,那就不要理他們。你總是可以在途中學到你需要的一切。保持學習的態度比已經知道一切更加重要。 再次強調,我講的是網頁開發,而不是需要數學知識的圖形學或特定應用領域。

Python列表

列表是一种基本的Python数据结构。 它们允许您将多个值分组并使用一个常用名称引用它们。 例如: dogs = ["Roger", "Syd"] 列表可以保存不同类型的值: items = ["Roger", 1, "Syd", True] 您可以使用in运算符检查一个项是否包含在列表中: print("Roger" in items) # True 列表也可以定义为空: items = [] 您可以通过索引引用列表中的项,索引从零开始: items[0] # "Roger" items[1] # 1 items[3] # True 使用相同的表示法,您可以更改存储在特定索引处的值: items[0] = "Roger" 您还可以使用index()方法: items.index("Roger") # 0 items.index("Syd") # 2 与字符串一样,使用负索引将从末尾开始搜索: items[-1] # True 您还可以使用切片提取列表的一部分: items[0:2] # ["Roger", 1] items[2:] # ["Syd", True] 使用len()全局函数可以获得列表中包含的项数,与我们用于获取字符串长度相同: len(items) # 4 您可以使用列表的append()方法将项添加到列表中: items.append("Test") 或者使用extend()方法: items.extend(["Test"]) 您也可以使用+=运算符: items += ["Test"] 提示:使用extend()或+=时,请不要忘记方括号。不要写成items += "Test"或items....

一個關於Vim的簡短指南

vim 是一款非常受歡迎的文件編輯器,尤其在程序員中間。它正在積極開發和頻繁更新,並且擁有龐大的社區。甚至有一個Vim研討會! 在現代系統中,vi 只是指向 vim 的別名,這意味著 vi 是 vim 的增強版。 通過在命令行上運行 vi 命令來啟動它。 您可以在啟動時指定要編輯的特定文件名: vi test.txt 您需要知道Vim有2個主要模式: 命令(或正常)模式 插入模式 當您啟動編輯器時,您處於命令模式。您無法像GUI編輯器那樣直接輸入文本。您必須進入插入模式。您可以通過按下 i 鍵來進入插入模式。一旦這樣做,底部編輯器出現 -- INSERT -- 字樣: 現在您可以開始輸入並將螢幕填滿文件內容: 您可以使用箭頭鍵移動文件,或使用 h - j - k - l 鍵。 h-l 是左右,j-k 是下上。 編輯結束後,您可以按 esc 鍵退出插入模式,並返回命令模式。 此時,您可以瀏覽文件,但無法向其中添加內容(請小心按下的按鍵,因為它們可能是命令)。 現在您可能想要做的一件事是保存文件。您可以按 :(冒號)然後按 w 來保存。 您可以按 : 然後按 w 和 q 來保存並退出::wq 您可以按 : 然後按 q 和 ! 來不保存退出::q! 要撤消並編輯,進入命令模式並按 u。您可以通過按 ctrl-r 來重做(取消撤消)。 這些是使用Vim的基礎知識。從這裡開始,開始了一個我們無法在這個簡介中深入探討的兔子洞。 我只會提及那些讓您開始使用Vim進行編輯的命令: 按下 x 鍵刪除當前高亮顯示的字符 按 A 進入當前選中行的末尾 按 0 轉到行的開頭 轉到單詞的第一個字符,按 d 再加上 w 刪除該詞。如果您使用 e 而不是 w,則保留下一個詞前面的空格 在 d 和 w 之間使用一個數字來刪除多個詞,例如使用 d3w 刪除3個詞向前 按下 d 後按 d 來刪除整行。按下 d 後按 $ 來刪除從光標所在位置到行的結尾的整行 要了解更多有關Vim的信息,我推薦閱讀Vim FAQ ,尤其是運行 vimtutor 命令,這應該已經安裝在您的系統上,並且將大大幫助您開始探索 vim。

不要從一個語言跳到另一個

今天我想談談在學習編程時可能遇到的一個問題。 我收到很多提到這個問題的電子郵件。 以下是一個例子。 你開始學習Python編程。過了一段時間後感到沮喪,失去動力,等等。然後你切換到JavaScript。 你開始學習JavaScript,直到遇到了一個阻礙點,事情變得比預期的困難,或者你不知道接下來應該學習什麼。 對於這個編程事情你感到疲倦,所以你放棄了。 或者你再次切換到另一種語言,希望這次能成功。 我稱之為「從一個語言跳到另一個」。 在網站開發中,從一個框架跳到另一個框架也很常見。你從Vue開始,然後切換到React,然後再切換到Svelte,然後又出現了一個新的框架。 草地並不比對岸更綠。 選擇一個事物。 堅持下去。 深入學習它。 將它了解透徹。 有一天你會意識到你真的想學習另一種語言,那很好。 但是在開始和成為一名開發者時,選擇一個語言。 每次切換語言,你都需要忘記一些東西,並學習新語言如何處理事物。 這也會讓你感到困惑。 你會開始混淆事情。 在一開始的時候,選擇哪種語言並不重要。 如果我必須建議一個,Python和JavaScript是非常好的選擇,因為它們的流行性和靈活性。

人人都可以學習編程

就像人人都可以學習數學基礎一樣。或者就像人人都可以學會開車,或學會使用智能手機一樣。 我相信每個人都可以學會編程。只要付出足夠的努力,使用好的培訓材料,並具備一定的動力,這是非常具有可行性的。 同時,我認為學習編程應該是有趣的。會計是無聊的。但是編程電腦呢?我們可以讓它們做很棒的事情,所以只是想到它是件無聊的事情就讓我笑出聲來。這是現代世界中最有趣的事情之一。 我在整個課程中都採用這種方法。讓我們一起學習編程JavaScript,並且讓它變得有趣! 我不假設任何特定的背景知識 - 每個人都可以學會編程,而且你不需要知道計算機內部的工作原理!畢竟,我們可以拍攝出精彩的視頻和照片,而不必知道相機的內部工作原理,對吧? 順便說一下,我也會解釋一點關於這方面的知識。 曾經在10年之前,我們是那些整天呆在房間裡,盯著螢幕的怪人。如今,幾乎全世界的每個人口袋裡都有一台計算機 - 我們征服了世界。 你可能會從不同的角度來學習編程。也許你正在轉行。也許你一直想成為一名網絡開發人員,但生活卻把你帶到了其他地方。也許你15歲,準備佔領世界。也許你85歲,只是想創造一些有趣的東西,不需要賺錢,只是為了樂趣和讓事情運行的滿足感。所有這些都是學習編程的很好且完全有效的理由。

什麼是騙子綜合症

這是什麼症候群?你有嗎?如何解決這種騙子的感覺? 每個人遲早都會遭受到我們稱之為「騙子綜合症」的困擾。 也許你現在就有這種感覺,但你不知道它有一個特定的名字。 讓我來描述一些你可能在現實生活中遇到騙子綜合症的情況。 你是一名開發人員,沒有計算機科學學位,你覺得那些有計算機科學學位的人比你懂得多,所以你也應該去拿個學位,才能被稱為一個開發人員。 你在一個項目上工作,而你稱它為一個小項目,不是一個真正的項目,因為 - 你知道 - 它只是一個簡單的應用程序。 你經常貶低自己,對自己的能力缺乏信心。 你認為其他開發人員比你知道得多。 你認為總有一天會有人發現你不配擔任你的工作,因為你無法在一本隨機書上解決第423個編程面試測驗題。 你覺得自己不屬於「程序員俱樂部」。 你想開始寫博客,但你害怕別人的意見,甚至認為自己無法提供任何新內容,所以你連開始都不敢。 我之所以知道這些例子,是因為有人發送電子郵件給我,寫明了這些非常具體的問題。 現在有時候我認為解決的方法是告訴自己: 每個人都在背水一戰 沒有人真的知道自己在做什麼 你崇拜的人在公開場合喜歡顯得自信滿滿,但內心其實並非如此 從根本上講,事情永遠都會是這樣 但這仍然是一種自卑的表現。 對於這樣的思考,真正的回應是意識到自己從一開始走了多遠。 回頭看看。 有一天你甚至不知道如何打開電腦。甚至不知道什麼是代碼。你不知道你實際上可以創建程序並讓計算機按你的意願運行。 現在看著你自己。 你是自己最好的版本,但你絕對確信明天你會成為更好的版本。 你在進步,就像你的代碼一樣。 但你知道自己的手藝還不是完美的,而且我認為這種感覺可能永遠不會消失。畢竟,編程是如此廣泛的領域。 我們都知道那些非常自信的人,他們會因為別人不懂他們特別擅長的一個領域而貶低他人……我們不要成為那樣的人。 找到你的舒適點。 我相信,如果你開始更相信「你就是為這個而生的」,你會在自己的手藝上進步得更好。 解決一個錯誤的最困難的部分是識別這個錯誤。其餘的就變得容易起來了。

你應該是團隊中最差的開發人員

一些關於你的技能水平與你一起工作的人的想法 我是通過一位朋友介紹程序設計的。當時他來我家,當我們在玩Linux電腦時(應該是1997年左右),他問我:“你不知道如何編程電腦嗎?” 我回答道:“不知道”,然後他很友好地給我講解了如何在Linux上編譯C代碼的教程。 那是我對真正程式編程的第一次接觸,當然不算MIRC的修改和主題,雖然它們也算是編程,但更像是腳本。 那時的我是一個菜鳥,看到這個非常有知識的人讓我意識到自己所不知道的知識有多少。我對什麼都不懂,我只是在使用電腦,而不是編程。 然後在大學裡,我是小組裡最差的學生。要知道,這是一所工程學校,而我並不是成績優秀的學生,所以我從身邊的人那裡學到了很多,也學會了如何提升自己以達到他們的水準。比起去一所要求不高且在中等水平的學生中成為最好的學生,我覺得這樣學到的東西更多。 但是當我大學畢業後開始工作時,因為我是一個自由工作者,有時會發現自己是房間裡最好的開發人員。我積極努力避免這樣的情況。 我最喜歡的工作是和團隊合作的工作,尤其是那些每個團隊成員在某些特定技能方面都比我更優秀的工作。比如技術能力方面或是成為一個出色的團隊成員。 現在的我已經不再是團隊的一部分了,已經有2年多了。獨自工作的我必須找到一群我可以向他們學習的人。 如何做到呢? 下面是我從中學習的一些人: 播客。我訂閱了將近200個播客,並定期尋找我可以學習的話題。從技術類的JavaScript編程到數碼營銷,再到聆聽其他人在互聯網上的創業者或小型企業主的冒險故事。 博客。我讀很多關於各種主題的博客。 Twitter。我在Twitter上關注一些智者和令人難以置信的人,不論是直接關注還是使用列表。 書籍。我讀了很多關於各種主題的書籍。 YouTube。我每個星期都會花幾個小時觀看很棒的YouTube視頻,從編程螢幕錄製到JavaScript會議演講。不僅如此,我也喜歡消費很多不同的內容,包括人們在森林裡散步並談論露營之類的。 這樣子很多。我沒有列出會議或活動,因為我很少去參加。但我也忘了與人面對面的接觸,當然,這是學習的最有效方法之一。 對我作為獨立工作者而言,這種比例非常適用: 1/3 學習新的東西 1/3 實踐我所學到的東西 1/3 教授我所學到的東西 有時我學到的東西只是存儲在長期存儲中,或者僅僅將其保存在腦海中以供以後使用(因為現在可能用不到它們)。 這適用於我作為獨立工作者,因為我沒有團隊成員。這同樣適用於自由工作者,或者那些在某些他們不認識的領域中努力提高的人。 我想我想要說的是,不要只滿足於成為自己所認識的特定領域中最好的人,也不要只比周圍的人更好,這是危險的。 由於互聯網的存在,你可以很容易地接觸到無數比你更優秀的人以學習你所做的事情。