小编Dáv*_*nár的帖子

如何使用React useEffect仅调用一次加载函数

useEffect阵营钩将运行在功能上传递的每一个变化.这可以进行优化,只有在所需的属性发生变化时才能调用它.

如果我想调用初始化函数componentDidMount而不是在更改时再调用它会怎么样?假设我想加载一个实体,但加载函数不需要组件中的任何数据.我们怎么能用useEffect钩子做这个?

class MyComponent extends React.PureComponent {
    componentDidMount() {
        loadDataOnlyOnce();
    }
    render() { ... }
}
Run Code Online (Sandbox Code Playgroud)

使用钩子,这可能是这样的:

function MyComponent() {
    useEffect(() => {
        loadDataOnlyOnce(); // this will fire on every change :(
    }, [...???]);
    return (...);
}
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-hooks

133
推荐指数
9
解决办法
6万
查看次数

期望 SwiftUI DynamicProperty 属性包装器的内部更新触发视图更新是否正确?

我正在尝试创建 SwiftUI 支持的自定义属性包装器,这意味着对相应属性值的更改会导致 SwiftUI 视图的更新。这是我所拥有的简化版本:

@propertyWrapper
public struct Foo: DynamicProperty {
    @ObservedObject var observed: SomeObservedObject

    public var wrappedValue: [SomeValue] {
        return observed.value
    }
}
Run Code Online (Sandbox Code Playgroud)

我看到即使 myObservedObject包含在我的自定义属性包装器中,SwiftUI 仍然会捕获更改,SomeObservedObject只要:

  • 我的属性包装器是一个结构
  • 我的财产包装符合 DynamicProperty

不幸的是,文档很少,我很难判断这是否仅适用于当前的 SwiftUI 实现。

DynamicProperty(在 Xcode 中,而不是在线)的文档似乎表明这样的属性是从外部更改导致视图重绘的属性,但是无法保证当您使自己的类型符合此协议时会发生什么。

我可以期待这在未来的 SwiftUI 版本中继续工作吗?

swift swiftui property-wrapper

16
推荐指数
1
解决办法
1569
查看次数

重新选择将无法正确记忆同一组件的多个实例

我正在阅读Redux的文档并且被困在了reselect.下面的代码创建了一个选择器和文件说,如果我们想用它两个VisibleTodoList部件,那么它不会工作正常.

import { createSelector } from 'reselect'

const getVisibilityFilter = (state, props) => state.todoLists[props.listId].visibilityFilter

const getTodos = (state, props) => state.todoLists[props.listId].todos

const getVisibleTodos = createSelector([getVisibilityFilter, getTodos], (visibilityFilter, todos) => {
  switch (visibilityFilter) {
    case 'SHOW_COMPLETED':
      return todos.filter(todo => todo.completed)
    case 'SHOW_ACTIVE':
      return todos.filter(todo => !todo.completed)
    default:
      return todos
  }
})

export default getVisibleTodos
Run Code Online (Sandbox Code Playgroud)

将getVisibleTodos选择器与visibleTodoList容器的多个实例一起使用将无法正确地进行memoize

const mapStateToProps = (state, props) => {
  return {
     // WARNING: THE FOLLOWING SELECTOR DOES NOT CORRECTLY MEMOIZE …
Run Code Online (Sandbox Code Playgroud)

javascript redux react-redux reselect

4
推荐指数
1
解决办法
721
查看次数

在F#序列中复制列表项n次

我在F#中有一个序列:

let n = 2

let seq1 = {
    yield "a"
    yield "b"
    yield "c"
}
Run Code Online (Sandbox Code Playgroud)

我想打印序列中的每个项目n次.我可以这样做:

let printx line t = 
    for i = 1 to t do
        printfn "%s" line

seq1 |> Seq.iter (fun i -> printx i n)
Run Code Online (Sandbox Code Playgroud)

输出为:
a
a
b
b
c
c

我认为这不是最好的解决方案.如何复制序列中的项目?

f# seq

1
推荐指数
1
解决办法
302
查看次数