Вот кое-что из того, что я нарисовал, и, надеюсь, оно поможет вам: https://codesandbox.io/s/m30ym10m9p
По сути, у вас есть некоторые elems
в массиве, хранящемся в состоянии, у вас есть , который добавляет новые элементы в указанный массив, и каждый раз, когда вы добавляете элемент, вы также создаете
setTimeout
, который удаляет себя из массива по истечении времени ожидания , Вот как выглядит код:
Установить суперосновный массив в состоянии:
state = {
elems: []
};
Рендеринг элементов из состояния:
render() {
// pretty basic, just a normal button to add elements & map through state to render
return (
<>
{this.state.elems.map((elem, i) => (
{elem.text}
))}
>
);
}
Добавить элемент в состояние (объяснено в более подробно в нижней части поста):
addElem = () => {
const elems = [...this.state.elems];
// create empty id to be filled later
let timeoutProps = { id: null };
// set timeout for element to be removed
const timeoutId = setTimeout(
({ id }) => {
this.removeElem(id);
},
1000,
timeoutProps
);
// quickly add timeout id to props, which will get passed back in to timeout
timeoutProps["id"] = timeoutId;
// add new element to "elems" array
elems.push({
text: `New!! (${timeoutId})`,
id: timeoutId
});
// update state
this.setState({ elems });
};
Удалить элемент из состояния:
removeElem = id => {
let elems = [...this.state.elems].filter(elem => elem.id !== id);
this.setState({ elems });
};
render
довольно просто, но дайте мне знать, если у вас есть вопросы по тот. Прикольная часть моего кода - это метод addElem
. Я хотел убедиться, что timeoutId
был сохранен после создания тайм-аута, и после того, как тайм-аут истек, функция removeElem
может быть вызвана с переданным ему идентификатором тайм-аута.
Чтобы передать идентификатор тайм-аута в removeElem
(после истечения тайм-аута), я должен был быть немного хитрым с объектами javascript.
id
реквизитом: let timeoutProps = { id: null };
{id: null}
. Таким образом, его можно изменить в другом месте, и любое будущее использование timeoutProps
будет использовать обновленные данные. setTimeout
. timeoutProps
id
to timeoutId setTimeout
все еще не был запущен, переменная timeoutProps
теперь указывает на обновленные данные {id: timeoutId}
setTimeout
, setTimeout
теперь будет иметь доступ к {id: timeoutId}
и сможет передавать timeoutId
в removeElem
. 1136] Надеюсь, это имеет смысл? Это одна из самых запутанных (и забавных) вещей в Javascript: D С удовольствием объясню больше, если это необходимо.
System.getProperty("user.home") +File.separator + "Документы";
И не волнуйтесь о с локализацией, посмотрите:
macb:Documents laullon$ pwd
/Users/laullon/Documents
Мой OS X находится на испанском языке.
Вы хотите использовать eio Apple. Расширение FileManager:
static public String documentsDirectory()
throws java.io.FileNotFoundException {
// From CarbonCore/Folders.h
final String kDocumentsDirectory = "docs";
return com.apple.eio.FileManager.findFolder(
com.apple.eio.FileManager.kUserDomain,
com.apple.eio.FileManager.OSTypeToInt(kDocumentsDirectory)
);
}
На Mac (насколько я знаю всех недавних 10.x варианты) каталог "My Documents" расположен в (от корня):
/ Пользователи / <имя пользователя> / Документы
Таким образом это находится в подкаталоге "Документов" в рамках корневого каталога для пользователя.