Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

原来真的可以在 Next.js 中写 PHP 代码?网友的脑洞又大了! #56

Open
qufei1993 opened this issue Nov 6, 2023 · 0 comments
Assignees
Labels

Comments

@qufei1993
Copy link
Owner

Next.js 14 近期发布,其中一个重大的功能点是 Server Actions 成为稳定版,因其超前和熟悉的开发方式,在社交网络上引起了一阵讨论,应该是下面这张图的内容了。

有人说这是又回到 PHP 的时代了吗?

古话说的好 “人有多大胆,地有多大产”。只要你敢想象,一切就皆有可能。这不,这几天 Github 上出现了一个 https://github.com/bufferhead-code/nextjs-use-php 的项目,它的目的是让你可以在 Next.js 中写 PHP,这是不是真的使 “嘲笑 PHP” -> “理解 PHP” -> “成为 PHP” 成为现实?(注意,这并不是真的!)

就像使用 "use server" 一样,在 React Server Component 中用 "use php" 来写 PHP 代码,如下所示:

return (
    <button
        formAction={async () => {
            'use php'
            (new PDO('mysql:host=localhost:3306;dbname=public', 'root', 'root'))
                ->prepare("INSERT INTO Bookmarks (slug) VALUES (?)")
                ->execute(array('new'));
            }}>
        Insert Bookmark
    </button>
)

还可以在 React Client Component 中这样写:

// actions.js
'use server'

export async function phpHelloWorld() {
    'use php'
    print "Hello from PHP";
}
// page.tsx
import { phpHelloWorld } from "../actions";

上述代码,需要在 https://github.com/bufferhead-code/nextjs-use-php 仓库拉取代码并执行以下命令运行:

npm install
npm run build
npm run start

浏览器打开 http://localhost:3000 查看结果。

声明:我想说的是你不应该在任何项目中考虑使用它,上述只是作者通过一些脚本手段让这些奇怪的想法成为了一种可能,但你觉得会有实际意义吗?

类似这样愚蠢的项目还有 https://github.com/elnardu/react-use-c、https://github.com/elnardu/react-use-rust

Next.js 自从 13 版本以来,带来的 App Router、Server Component、Server Actions、预渲染(流式渲染)等功能,改变了以往传统的前端开发方式,新的开发范式,总会带来一些新的问题思考,这不一定就是坏的。

@qufei1993 qufei1993 self-assigned this Nov 6, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant