类似 Mithril 这样函数式风格的前端框架为什么一直不温不火? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
FollowHYH
V2EX    Javascript

类似 Mithril 这样函数式风格的前端框架为什么一直不温不火?

  •  
  •   FollowHYH 2024-06-06 00:04:06 +08:00 via Android 2189 次点击
    这是一个创建于 493 天前的主题,其中的信息可能已经有所发展或是发生改变。

    之前在Component Party上看到了 Mithril 这个框架,受它启发还自己做了一个半成品仓库),后来发现风格类似的还不少,比如 Hyperapp 。为什么这种框架一直不温不火呢?

    注:本人承认自己才疏学浅,对其它框架及其用户没有恶意 本人作为一名初出茅庐的新手,确实喜欢这种风格,并对 JSX 心存疑虑,对 Svelte 的诸多“魔法”有所敬畏,但持完全开放的态度。如果可以的话,还请各位指出一下我的那个所谓半成品框架存在何种问题,能做何种改进,或者是否有存在的必要。

    无由会晤,不任区区向往之至。

    12 条回复    2024-06-06 18:00:13 +08:00
    secondwtq
        1
    secondwtq  
       2024-06-06 00:29:26 +08:00
    一个 random 的框架,没人用才正常,能做到“不温不火”和很火的都是 outlier 。
    你首先得给我一个用它的理由,相比于 React ,它有哪些优势呢?
    Leviathann
        2
    Leviathann  
       2024-06-06 00:44:52 +08:00
    函数式框架
    那不就是 elm ?这甚至是一门语言
    FollowHYH
        3
    FollowHYH  
    OP
       2024-06-06 07:10:09 +08:00
    @secondwtq 不知道什么是"random",可以解释一下吗?谢了
    RedNax
        4
    RedNax  
       2024-06-06 08:41:37 +08:00
    对于新框架第一个疑问就是生态。
    没有 React 、Vue 、Angular 的生态,谁敢在生产环境中用这些新框架?
    然后就是先有鸡还是先有蛋的问题了。
    React 、Vue 、Angular 的成功要么是那个时间点没有更好的选择,要么是背后有超大金主在强推,现在站稳了,其他框架要崛起哪有那么容易。
    wujianhua22
        5
    wujianhua22  
       2024-06-06 08:52:58 +08:00
    因为搞前端的人总想造轮子,无非就是想证明自己技术了得,但又没办法解决啥行业痛点。如果造的轮子能和 anularjs 这种打破 jq 时代的神话一样,那么你的轮子就会火起来啊。如果只是在这些巨人的肩上造了一些你自己所谓的语法糖轮子,我不认为会火。
    zhuangzhuang1988
        6
    zhuangzhuang1988  
       2024-06-06 08:58:24 +08:00
    调试(inspect)功能呢,
    没有调试功能的框架我都当黑盒子,总不能一直 log 调试法
    lod
        7
    lod  
       2024-06-06 09:54:39 +08:00
    看了下代码示例,这跟 React 不使用 JSX 有什么区别吗?(不是很懂前端,没有阴阳怪气)
    kneo
        8
    kneo  
       2024-06-06 09:56:30 +08:00
    说下你口中的“函数式”是什么意思。不会就是去掉 jsx 吧……你用 React 也可以用 React.createElement:

    import { createElement } from 'react';

    function Greeting({ name }) {
    return createElement(
    'h1',
    { className: 'greeting' },
    'Hello'
    );
    }

    我不想使用工具链的时候就是这么写的。

    Vue 也一样:

    import { h } from 'vue'

    const vnode = h(
    'div', // type
    { id: 'foo', class: 'bar' }, // props
    [
    /* children */
    ]
    )

    需要动态创建组件的时候经常会这么写。

    这些都是框架最表面的一层,甚至都算不上框架的一部分(更像是工具链的一部分)。你使用了 React.createElement 或者 h 其实并不能增加多少你对底层机制的理解。我也不觉得对生产力提升有帮助,反而会极大影响可读性。写多了你就腻了。

    唯一的优势,就是当你自己想山寨一个“半成品”的时候,可以省一步转译。
    XCFOX
        9
    XCFOX  
       2024-06-06 13:17:41 +08:00
    真喜欢函数直接用 React 就可以了。React 在 16.8 引入 hook 之后已经是函数式完全体了。

    React 连组件都是拿函数声明的,state 、reducer 、hook 无不体现函数式的思维。粗看下来 Mithril 的组件还是拿对象来声明,没有贯彻太多函数式的思维。

    Mithril 自娱自乐也凑活,真拿来写项目还缺少 路由、状态管理、组件库、SSR 这些必要功能。
    hwf
        10
    hwf  
       2024-06-06 14:14:43 +08:00
    点进去看了眼, 这要是能火才奇怪, 相比 react 没什么优势, 不想写 jsx 可以直接用 createElement, 语法还比这个简单
    mizuhashi
        11
    mizuhashi  
       2024-06-06 14:36:51 +08:00 via iPhone
    mithril 的式和其他的原理不同,每次事件全局的重渲染,因此你的可以只是 vanilla js 的值/象,不需要像 vue 那分普通值和 ref ,也不需要像 react 那用 hooks set ,是它的特色

    如果 mithril 不好看,可以看看 imba.io ,者原理相同
    secondwtq
        12
    secondtq  
       2024-06-06 18:00:13 +08:00
    @FollowHYH 就是一个 random 的人做的一个 random 的框架啊,这就是人们在网上 randomly 地刷到一个项目时的感受
    要想有人用,你得突出核心设计目的和思路,独有的特点,哪怕买一堆 star 呢。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1155 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 17:48 PVG 01:48 LAX 10:48 JFK 13:48
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86