用代码试一下是最快的,你把 before_action 从 ApplicationController 移到你实际想要控制的 Controller 看看就知道了。
authenticate_sys_user! 是 devise 提供的,但 before_action 是 Rails 的。因为 ApplicationController 基本上是所有 controller 的超类,所以 DeviseTokenAuth::SessionsController#create 受影响其实很正常。
我觉得你有点钻太深了,要得到答案估计得研究实现的代码。当成黑盒就比较好理解,setState 是异步这一点需要我们去注意就只有当要根据当前组件 state 推导新的 state 的时候。
class Counter extends React.Component {
constructor(props) {
super(props);
this.state = {counter: 0};
}
componentDidUpdate() {
console.log(this.state.counter)
}
handleClick = () => {
this.setState((state, props) => ({
counter: state.counter + 1
}))
this.setState((state, props) => ({
counter: state.counter + 1
}))
}
render() {
return (
<div>
<button onClick={this.handleClick}>Click Me</button>
<h2>{this.state.counter}</h2>
</div>
);
}
}
// ========================================
ReactDOM.render(
<Counter />,
document.getElementById('root')
);
另外 componentWillUpdate 文档不推荐使用了。上面这段代码实验了一下,handleClick 执行了两次 setState,不过 componentDidUpdate 只执行了一次。你提的那些问题要想深究,可以自己写代码测试一下。
https://reactjs.org/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous
为什么说 setState 是异步的跟这对我们的影响可以看官网的文档。 我的理解是这样子,假如组件方法里有段代码是这样子
// 假设 this.state.counter 原先的值为 0
this.setState({
counter: 1,
});
this.setState({
// 文档说了为了性能多个 setState 调用可能合并成一个单独的状态更新
// 那么这里 this.state.counter 的值是 0 还是 1 呢?
counter: this.state.counter + 1,
});
最先想到的是你现在生成的文件再处理一下,用正则表达式替换
感觉还是 web 退潮后 Rails 没有五六年前那么火了。要组织活动,不提场地之类的硬性要求,单是有足够多的参与者这点就够呛。日本 ruby 环境应该不算差,但看 ruby magazine 类似的活动大概也就一年一次。
# @param {Integer[]} nums
# @return {Void} Do not return anything, modify nums in-place instead.
def next_permutation(nums)
result = nums.sort.dup # 这里符合题目要求的额外常数空间吗?
(0..nums.length - 1).reverse_each do |i|
if nums[i - 1] && nums[i] > nums[i - 1]
ex_num = nums[i..-1].sort.find {|n| n > nums[i-1] }
ex_index = nums.index.with_index {|n, j| j > i - 1 && n == ex_num}
nums[i-1], nums[ex_index] = nums[ex_index], nums[i-1]
result = (nums[0..i-1] + nums[i..-1].sort).dup
break
end
end
result # 看注释,题目要求不返回值,只在 nums 上操作。为什么要返回 result 呢?
end
"Above all, I hope we don't become missionaries. Don't feel as if you're Bible salesmen. The world has too many of those already. What you know about computing other people will learn. Don't feel as if the key to successful computing is only in your hands."
"No Silver Bullet"
可惜 pragmatic 只支持信用卡付款。
感觉还是 Elixir 既是小众语言,又没有什么杀手级应用的缘故。像 Web 开发,Rails 发展到现在都很成熟,没有什么理由非要用 Phoenix;至于做高负载系统,Go、C++ 感觉够用了,而且基于招人考虑,感觉会选 Elixir 的基本没有。 不过我还是很喜欢 Elixir,第一次接触函数式编程的缘故,Pattern Match 感觉很新鲜。这几天刚看完了官网的 Guide,接下来准备看完 Phoenix 的 guide。Elixir 作为兴趣还行,如果想靠它找工作怕是不容易。
Go 程序设计语言 (英文版) 借楼主的帖求私信一个能稳定访问 https://golang.org 的方法,付费的也行。
刚好最近也在找相关的资料,搜到这个感觉还不错 https://scotch.io/tutorials/build-a-restful-json-api-with-rails-5-part-one
感觉真要找的话直接联系他招聘帖子里留的 HR 可能找得到,就是不知道离职了没
不是很会描述,大概是将一个数组打散作为参数
def test(a, b)
puts a
puts "====="
puts b
end
my_arr = [1, 2]
test(*my_arr)
test(my_arr)
http://ruby-doc.org/stdlib-2.2.2/libdoc/bigdecimal/rdoc/BigDecimal.html
require 'bigdecimal'
print BigDecimal.new('2.3') ** BigDecimal.new('100')
发一下 gem list --local | grep psych
的结果
stackoverflow 有解释 http://stackoverflow.com/questions/19720711/git-push-warning-questions
在前面加上::表示访问在 top level 定义的常量。 你可以试着运行一下下面的代码
module Test
class File
def self.expand_path(foo, bar)
"This is a test"
end
end
puts File.expand_path('../config/environment', __FILE__)
puts ::File.expand_path('../config/environment', __FILE__)
end
谢谢。刚刚用 :e ++enc=euc-jp 转换就可以了
README 里面有个小错误。 “或者你可以通过 em installl 直接安装:” 应该是 gem install。
已经集成了,放心用就是。
既然学 Ruby 了,顺便把日语也学了吧。
#11 楼 @blacktulip 不违反吧,像下面这样赋值的话
a.foo = b.bar = 1024
凡是只使用类比就想要说服别人的都是耍流氓