这是100%的我只是误解了Reaction-Native中的状态是如何工作的,我希望得到一个有启发性的更正.
我已经宣布我的状态:
const [players, setPlayers] = useState(["",""]);
因此,默认情况下有两名球员,两人都没有名字.到目前一切尚好.
在我的render()中,这是我输出文本输入的地方:
{ players.map( (player, index) =>
<TextInput key={index} type="text" style={styles.playerEntry} name={"player-"+index} value={players[index].name} onBlur={event => changePlayerName(index, event, players)} placeholderTextColor={color.greyPlaceholder} placeholder={appText.player[language] + (index+1)} />
) }
这可以很好地工作,并使用正确的占位符绘制两个文本输入.
我的changePlayerName脚本也能正常工作,我已经在它上面放置了控制台日志(log),以确保:
This is me changing player 0's name to Michael
players : (2) ['Michael', '']
This is me changing player 1's name to David
players : (2) ['Michael', 'David']
到目前一切尚好.现在我想添加一个新的输入.请原谅控制台日志(log).我是一条老把戏的老狗.
const addPlayer = () => {
let playerState = players;
if (players.length <= 4) {
playerState.push("");
console.log("pushed");
}
setPlayers(playerState);
savePlayers(playerState);
console.log('addPlayer playerState : ', playerState);
console.log('players : ', players);
}
当我从添加播放器按钮运行此功能时,我在控制台中得到了一个可爱的Play by Play:
players : (2) ['Michael', 'David']
pushed
addPlayer playerState : (3) ['Michael', 'David', '']
players : (3) ['Michael', 'David', '']
pushed
addPlayer playerState : (4) ['Michael', 'David', '', '']
players : (4) ['Michael', 'David', '', '']
pushed
addPlayer playerState : (5) ['Michael', 'David', '', '', '']
players : (5) ['Michael', 'David', '', '', '']
所以我已经将玩家的状态更改为5项array.
遗憾的是,根本没有添加新的文本输入.更新的状态从未反映在array.map循环中.
我试着让它成为一个组件,并传递给它props ,但这似乎并没有改变结果.如果是这样做,请让我知道,我会张贴代码.
我一直在倾诉RN文档,但我担心我不太明白应该如何在RN应用程序中使用任何动态数据:|