一个喜欢Ruby的打工仔。

  • 用代码试一下是最快的,你把 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, 
    });
    
  • 如何往 yaml 文件写引号? at 2019年11月07日

    最先想到的是你现在生成的文件再处理一下,用正则表达式替换

  • 感觉还是 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 只支持信用卡付款。

一个喜欢 Ruby 的打工仔。