Использование опоры в качестве аргумента для useState
прекрасно подходит для установки начального значения.
Пример
const { useState } = React;
function X({ y }) {
const [index, setIndex] = useState(y);
const add = () => {
setIndex(index + 1);
};
return (
<div>
{index}
<button onClick={add}>+</button>
</div>
);
}
ReactDOM.render(<X y={5} />, document.getElementById("root"));
<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<div id="root"></div>
В PHP нет встроенных функций сравнения. но, ура для PEAR: Text_Diff (никогда не использовал его жестко, но в PEAR я верю).
и даже есть пакет PECL, xdiff
подсказка: классы pear являются чистым php Пакеты pecl являются модулями. обычно модули работают быстрее классов, но это также зависит от функциональности. Вы просто должны проверить и оценить.
для хранения: я бы сохранил простой текст, а не различия. Пространство дешево, многие базы данных (например, mysql) поддерживают сжатие данных (или вы можете распаковать / сжать в php), но если вы сохраняете открытый текст, вы не зависите от алгоритма diff и можете изменить его позже, если потребуется.
Если вам нужна скорость, вы можете хранить как открытые тексты, так и различия.
Обычный процесс - хранить каждую отдельную ревизию и вычислять разницу, когда пользователь хочет ее просмотреть, возможно, кэшируя вывод, если процесс дорогой.
Вы можете сохранить базовую ревизию, а затем иметь набор различий, которые можно применять для получения предыдущих версий.
В любом случае, есть уступка; первый вариант делает получение определенных версий недорогим, за счет чего требуется немного больше обработки, необходимой для различий; вторая делает просмотр различий дешевым, но за счет потенциально дорогих инкрементальных исправлений для получения конкретной версии.
Если содержание очень велико, а изменения незначительны, вы можете подумать о применении подхода «обратной дельты»: только последняя версия текста сохраняется в полном формате, а предыдущая версия - это разница. с последней версии на предыдущую.
Это сэкономит много места для хранения, но при сравнении двух версий, в которых количество модификаций велико, стоимость процесса может быть значительной. В конце концов, это всегда компромисс между объемом памяти и требованиями к обработке.
Если вы не можете или не хотите использовать PEAR и PECL, вы все равно можете использовать утилиту diff, вызываемую exec. Я бы наверняка выбрал стандартный формат сравнения и никогда не разрабатывал собственный.