Что я ожидаю
1. Пользовательские длинные даты a ряд ⇒ Modal Opens
2. Пользователь обновляет заголовок, а Taps подтверждают
3. Запрос API запускает → Redux Store Updates → Modal остается закрытым < /p>
Что на самом деле происходит < /p>
Шаги 1 и 2 в порядке, но сразу после того, как модал исчезает,
возвращается и застрял на экране. Я должен перезагрузить приложение, чтобы продолжить. Почему текстовый результат может причинить это?
Код: Выделить всё
const SidebarContent: React.FC = ({loading, onSelect}) => {
const {colors, dark} = useTheme();
const dispatch = useDispatch();
const chatThreads = useSelector(threadsSelector());
const [pending, setPending] = useState(null);
const [deleting, setDeleting] = useState(false);
const [renaming, setRenaming] = useState(false);
const [renamingUI, setRenamingUI] = useState(false);
const [title, setTitle] = useState('');
const [titleErr, setTitleErr] = useState('');
const handleInitiateRename = async () => {
setRenamingUI(true);
};
const handleRename = async () => {
if (!pending) return;
if (title.length < 3) {
setTitleErr('Title must be longer than 3 characters');
return;
}
setTitleErr('');
const {threadUuid} = pending;
setRenaming(true);
Keyboard.dismiss();
try {
const newTitle = await chatService.renameChatThread(threadUuid, title);
console.log('newTitle', newTitle.title);
dispatch(renameThread(threadUuid, newTitle.title));
} catch (e) {
console.warn('[renameChatThread]', e);
} finally {
setRenaming(false);
closeModal();
}
};
const closeModal = () => {
Keyboard.dismiss();
setPending(null);
setRenamingUI(false);
setTitle('');
};
const renderThread = ({item, index}: {item: ChatThread; index: number}) => {
const title = item.title ? item.title : `Thread ${index + 1}`;
const lastMsg = item.messages.at(-1)?.message ?? 'No messages yet';
return (
onSelect(item)}
disabled={!!pending}
onLongPress={() => setPending(item)}
// feels nice on touch
>
{title}
{lastMsg}
);
};
return (
{/* top-right "new chat" icon */}
console.log('new chat created')}>
{/* list header */}
Chats
{/* {loading && (
)} */}
{!loading && chatThreads.length === 0 && (
No conversations yet.
)}
t.threadUuid}
renderItem={renderThread}
showsVerticalScrollIndicator={false}
/>
{pending && (
!renaming || (!deleting && setPending(null))}>
onRequestClose={closeModal}>
style={[
StyleSheet.absoluteFill,
{backgroundColor: 'rgba(0,0,0,0.35)'},
]}
onPress={deleting || renaming ? undefined : closeModal}>
{/* Keyboard avoiding container */}
e.stopPropagation()}>
{renamingUI ? (
) : null}
{titleErr ? (
{titleErr}
) : null}
{!renamingUI ? (
{deleting ? (
) : (
Delete
)}
) : null}
handleInitiateRename()
: () => handleRename()
}>
{renamingUI ? 'Confirm' : 'Rename'}
)}
);
};
export default SidebarContent;
Подробнее здесь: https://stackoverflow.com/questions/796 ... submission