小编Rya*_*n Z的帖子

反应useState不触发重新渲染

我已经初始化了一个数组状态,当我更新它时,我的组件不会重新渲染。这是一个最小的概念证明:

function App() {
  const [numbers, setNumbers] = React.useState([0, 1, 2, 3]);
  console.log("rendering...");
  return (
    <div className="App">
      {numbers.map(number => (
        <p>{number}</p>
      ))}
      <input
        type="text"
        value={numbers[0].toString()}
        onChange={newText => {
          let old = numbers;
          old[0] = 1);
          setNumbers(old);
        }}
      />
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

根据此代码,似乎输入应包含开始的数字0,并且每当更改输入时,状态也应更改。在输入中输入“ 02”后,App组件不会重新呈现。但是,如果我在5秒钟后执行的onChange函数中添加setTimeout,则表明数字确实已更新。

关于组件为何不更新的任何想法?

这是带有概念证明的CodeSandbox

javascript reactjs react-hooks

6
推荐指数
4
解决办法
2451
查看次数

Flow 允许与 object.entries 和 string 连接

我有这样的类型:

type Cool = {
    [key: string]: number
}
Run Code Online (Sandbox Code Playgroud)

现在,假设我有一个该类型的对象:

let my: Cool = {
    "asdf": 1,
    "jkl": 2
}
Run Code Online (Sandbox Code Playgroud)

当我跑步时Object.entries(my),我得到了[["asdf", 1], ["jkl", 2]]。这似乎很正常。但是,我想将每个键组合起来形成一个字符串,如下所示:

let mystring = "";
Object.entries(my).forEach(entry => {
    mystring = entry[1] + mystring;
});
Run Code Online (Sandbox Code Playgroud)

我希望它mystring等于“jklasdf”,确实如此。但是,我mystring = ...在线路上遇到了流程错误。错误指出:

无法转换Object.entries(...)[0][1]为字符串,因为混合 [1] 与字符串不兼容

关于如何解决这个问题的任何想法?谢谢!

javascript flowtype

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

从数组中删除了错误的项目

我有一个组件,其中包含状态的项目数组,但每当我尝试删除项目时,将删除错误的项目.

这是我的父组件的简化版本:

export default class BankList extends Component {
    state = {
        banks: [new Bank("Name1"), new Bank("Name2")]
    }

    addBank() {
        this.setState({banks: [...this.state.banks, new Bank("")]})
    }

    removeBank(index) {
        let good = [];
        this.state.banks.forEach((item, ind) => {
            if(ind !== index){
                good.push(item);
            }
        });
        this.setState({banks: good}); 
    }

    render() {
        return (
            <Container>
                <Content>
                    <List>
                        {this.state.banks.map((bank, index) => <BankContainer bank={bank} key={index} id={index} onRemove={() => this.removeBank(index)}/>)}
                    </List>
                    <Content>
                        <Right>
                            <Button onPress={() => this.addBank()}>
                                <Text>Add Bank</Text>
                            </Button>
                        </Right>
                    </Content>
                </Content>
            </Container>
        )
    }
}
Run Code Online (Sandbox Code Playgroud)

BankContainer类只显示Bank,当按下其中的"remove"按钮时,它将使用提供的id调用onChange.我已经验证了正确的索引被传递到removeBank.但是,在removeBank执行后,当我选择第一个项目(索引0)时,最后一项(索引1)将从库数组中删除.我在removeBank中尝试了以下方法体,但无济于事:

试了一个浅的副本: …

javascript arrays node.js reactjs react-native

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