更改选项卡项时组件不会重新呈现以做出反应
Component does not rerender in react when changing tab item
我会使用 fluent ui for react 进行动态标签聊天。
实际上,我正在使用条件开关显示内容,return 聊天内容取决于点击的选项卡项目。
这里是切换条件
let switchTasks = (type, data) => {
switch (type) {
case "people":
return <p>{data.content}</p>; // send basic text
case "chat":
return <ChatExample infos={data} />; // send component chat.
default:
break;
}
};
在我的聊天组件中,我设置了一个状态,我用初始聊天内容(应该来自状态)初始化,然后每次添加消息时我都会更新。
const ChatExample = props => {
const [inputValue, setInputValue] = React.useState("");
const items = [
{
message: (
<Chat.Message
content="Hello"
author="John Doe"
timestamp="Yesterday, 10:15 PM"
mine
/>
),
contentPosition: "end",
attached: "top",
key: "message-id-1"
},
...
];
const [itemsChat, setItemsChat] = React.useState(items);
const handleKeyDown = event => { // to add messages to chat.
if (event.key == "Enter") {
let elm = {
message: (
<Chat.Message
content={inputValue}
author="John Doe"
timestamp="Yesterday, 10:15 PM"
mine
/>
),
contentPosition: "end",
attached: "top",
key: "message-id-1"
};
setItemsChat(itemsChat => [...itemsChat, elm]);
setInputValue("");
}
};
return (
<div>
<Chat items={itemsChat} />
<ItemLayout
content={
<Input
value={inputValue}
onKeyDown={event => handleKeyDown(event)}
onChange={event => setInputValue(event.target.value)}
fluid
clearable
placeholder="Message..."
/>
}
/>
</div>
);
};
这里是 demo of issue
我的实际问题是,当我 select 选项卡 2 或 3 时聊天内容没有改变(作者姓名在最后一个选项卡 selected selecting tab 1
)
当我将 <Chat items={itemsChat} />
替换为 <Chat items={items} />
时,它确实改变了内容,但在这种情况下,我将无法向聊天添加消息(itemsChat
代表 items
+ 新消息 )
如何通过不断向聊天添加新消息来使选项卡更新聊天内容?
如果您 'reusing' 同一组件 [树] 用于不同的数据,您应该使用不同的 key
来强制重新呈现整个结构:
return <ChatExample infos={data} key={data.content} />;
我会使用 fluent ui for react 进行动态标签聊天。
实际上,我正在使用条件开关显示内容,return 聊天内容取决于点击的选项卡项目。
这里是切换条件
let switchTasks = (type, data) => {
switch (type) {
case "people":
return <p>{data.content}</p>; // send basic text
case "chat":
return <ChatExample infos={data} />; // send component chat.
default:
break;
}
};
在我的聊天组件中,我设置了一个状态,我用初始聊天内容(应该来自状态)初始化,然后每次添加消息时我都会更新。
const ChatExample = props => {
const [inputValue, setInputValue] = React.useState("");
const items = [
{
message: (
<Chat.Message
content="Hello"
author="John Doe"
timestamp="Yesterday, 10:15 PM"
mine
/>
),
contentPosition: "end",
attached: "top",
key: "message-id-1"
},
...
];
const [itemsChat, setItemsChat] = React.useState(items);
const handleKeyDown = event => { // to add messages to chat.
if (event.key == "Enter") {
let elm = {
message: (
<Chat.Message
content={inputValue}
author="John Doe"
timestamp="Yesterday, 10:15 PM"
mine
/>
),
contentPosition: "end",
attached: "top",
key: "message-id-1"
};
setItemsChat(itemsChat => [...itemsChat, elm]);
setInputValue("");
}
};
return (
<div>
<Chat items={itemsChat} />
<ItemLayout
content={
<Input
value={inputValue}
onKeyDown={event => handleKeyDown(event)}
onChange={event => setInputValue(event.target.value)}
fluid
clearable
placeholder="Message..."
/>
}
/>
</div>
);
};
这里是 demo of issue
我的实际问题是,当我 select 选项卡 2 或 3 时聊天内容没有改变(作者姓名在最后一个选项卡 selected selecting tab 1
)
当我将 <Chat items={itemsChat} />
替换为 <Chat items={items} />
时,它确实改变了内容,但在这种情况下,我将无法向聊天添加消息(itemsChat
代表 items
+ 新消息 )
如何通过不断向聊天添加新消息来使选项卡更新聊天内容?
如果您 'reusing' 同一组件 [树] 用于不同的数据,您应该使用不同的 key
来强制重新呈现整个结构:
return <ChatExample infos={data} key={data.content} />;