和编程做个好玩的东西一样,找人讲英语也许是最快的。
终于不需要用 turbo_stream 逐个指定更新的位置了?
感觉不错。
我倒觉的 wechat 比 line 好用多了,
line 的主页杂乱不堪,啥都有,对于只用来聊天的我来说,实在欣赏不来。
淘宝,京东的网购用户体验比日本乐天,亚马逊好太多,个人感觉不是一个档次。
槽点无数,就不一一列举了,用过的都知道。
不需要,直接写 CSS 也行
确实比较麻烦,我是把 react 的 state bind 到 DOM 的 data 属性里面,再从 DOM 的属性读取。
交互度高的页面目前是整个页面全部写成 react。
新项目试了下 turbo + stimulus,感觉还不错。复杂的组件在 Controller 里面 render react。
看了下 ISSUE 好像不打算实现类似的 feature,在项目里面扩展了一下。
class Admin::BaseController < ApplicationController
around_action :use_simpleform_admin
def use_simpleform_admin
SimpleForm.use_namespace(:admin) do
yield
end
end
Config
SimpleForm.use_namespace(:admin) do
SimpleForm.setup do |config|
# some config for admin only
end
end
extend
# frozen_string_literal: true
require 'simple_form'
require 'simple_form/form_builder'
module SimpleForm
module Namespace
extend ActiveSupport::Concern
DEFAULT_VALUES = SimpleForm.class_variables.index_with {|k| SimpleForm.class_variable_get(k) }
def current_wrappers
current_configuration[:@@wrappers]
end
def use_namespace(name = :default)
old_namespace = current_namespace
switch_namespace(name)
yield
ensure
switch_namespace(old_namespace)
end
def switch_namespace(namespace)
Thread.current[:simple_form_namespace] = namespace
end
def current_namespace
Thread.current[:simple_form_namespace] ||= :default
end
def builder_discovery_cache
current_configuration[:@@discovery_cache] ||= {}
end
def custom_wrapper_mappings
current_configuration[:@@custom_wrapper_mappings] ||= {}
end
end
extend Namespace
@configurations = {}
def self.current_configuration
@configurations[current_namespace] ||= Namespace::DEFAULT_VALUES.deep_dup
end
SimpleForm.class_variables.each do |k|
method = k.to_s.tr("@@", '')
setter_method = "#{method}="
if SimpleForm.respond_to?(setter_method)
define_singleton_method(setter_method) do |v|
current_configuration[k] = v
end
end
next unless SimpleForm.respond_to?(method)
define_singleton_method(method) do
current_configuration[k]
end
end
def self.wrapper(name)
current_wrappers[name.to_s] or raise WrapperNotFound, "Couldn't find wrapper with name #{name}"
end
# Define a new wrapper using SimpleForm::Wrappers::Builder
# and store it in the given name.
def self.wrappers(*args, &block)
if block_given?
options = args.extract_options!
name = args.first || :default
current_wrappers[name.to_s] = build(options, &block)
else
current_wrappers
end
end
SimpleForm::FormBuilder.define_singleton_method(:discovery_cache) do
::SimpleForm.builder_discovery_cache
end
end
找了一大圈,发现在 react 中,通过代码的方法修改 input 的 value 不会触发 input 的 onChange 事件,要自己分发事件才行??只有手动输入才会触发。
是的,和你说的一样。stackoverflow 有类似问题,可以参考下。
可以使用 useEffect
useEffect(() => {
onChange(time);
}, [time]);
绑定 value 不会触发 input 的 onChange 事件。
直接在这里抛出。
const setFormatTime = (hour, minute) => {
const inputTime = padLeadingZeros(hour, 2) + ":" + padLeadingZeros(minute, 2);
setTime(inputTime);
onChange(inputTime);
}
// 父元素
const handleTimeInputChange = (time) => {
console.log(`current_time: ${time}`);
};
可以试试这个。
直接跑脚本应该可以。可以重新开一个 jobs,然后并行测试。
类似这样
jobs:
front_test:
steps:
- run:
name: front test
command: #{ your test command }
gitlab 的远程感觉感觉挺牛的,也许能借鉴一些。
虽然没用过,cloud9 也许不错。
踩坑才是提升技术的最好办法。
puma 的话试试 jemalloc
微服务里面的服务 (service) 用什么语言都行吧,这不正是微服务的一个优点吗?用 rails 当然也可以
可以参看图灵出版的微服务设计
感觉文章写的是微服务之间的管理,确实不是 rails 干的事情。
以前下来玩了一下,发现不能在 rails 下运行,就没关注了 不知道最近兼容性咋样
https://github.com/rails/rails/issues/41750#issuecomment-805803294 版本 0.3.6、0.4.0 好像没问题
日本招 rails 的挺多,虽然还是没 JAVA 多!
https://www.green-japan.com/search_key/01?key=2vkn2gx21xjyx34dfj15&keyword=Rails
看来是时候学的音乐了
我不由自主的笑了
http://lucida.me/blog/developer-reading-list/
以前看到的书单,到现在为止都没看完
@franklinyu 多谢,已经用上了。
一般需要缓存,每次都去下载肯定不快。 不知道你用什么 deploy 的,用 circleci 之类的缓存很简单。
newrelic 可以监控